Avatar billede ny89 Nybegynder
13. november 2011 - 11:06 Der er 21 kommentarer og
1 løsning

Foreign key

Sidder med foreign key og  har brug for jeres hjælp. Anvender InnnoDB i begge af mine tabeller, som har følgende id: Navn_id og den anden tabel Adresse_id.

Under relation har jeg gjort følgende:
valgt tabelnavn og Adresse_id
On DELETE: NOT NULL
ON UPDATE: CASCADE

Fejlmeddelelse: Error creating foreign key on adresse_id (check data types)

Formålet er at man først skal indtaste navn, brugernavn osv., efterfølgende indtaste adresseoplysninger på en ny side. Der skal være en relation mellem disse tabeller, når man indtaster de forskellige oplysninger.

På forhånd tak for hjælpen.
Avatar billede NegoZiatoR Nybegynder
13. november 2011 - 11:08 #1
Måske du har lagt din relation på det forkerte table..

Prøv at vende relationen om, så har du mulighed for at gøre det ene før det andet .. :)
Avatar billede ny89 Nybegynder
13. november 2011 - 11:12 #2
Får samme fejlmeddelelse, desværre. Ved ikke hvad der skulle være gået forkert måske under mine datatyper.
Avatar billede ny89 Nybegynder
13. november 2011 - 11:16 #3
Nej, det kunne vist godt lade sig gøre.. men nu vil den ikke tage mod informationer i forms. Ved ikke hvor det går galt.
Avatar billede NegoZiatoR Nybegynder
13. november 2011 - 11:18 #4
Hmm, den er svær at lurer.. du har ikke mere code-snippet man kan se ?
Avatar billede ny89 Nybegynder
13. november 2011 - 11:26 #5
Jeg anvender PhpMyAdmin og har anvendt følgende datatyper:

Navn_id: INT., primær nøgle og Auto_increment.
Adresse_id: INT., primær nøgle og Auto_increment.

Ved du om man både i tabel1 og tabel2 skal anvende foreign key eller er det kun i tabel 1?
Avatar billede NegoZiatoR Nybegynder
13. november 2011 - 11:36 #6
Du skal kun bruge det i det ene table.

Okay, som jeg lige ser det der..


[TABLE 1]
navn_id INT PRIMARY KEY AUTO INCREMENT

[TALBE 2]
addresse_id PRIMARY KEY AUTO INCREMENT
navn_id INT FOREIGN KEY REFFERENCE navn_id ON [TABLE 1]

Ved ikke lige om syntax er rigtig men nu har du en relation mellem table 1 og 2 hvor din foreign key på table 2 navn_id er primær nøgle på table 1.
Avatar billede ny89 Nybegynder
13. november 2011 - 12:00 #7
Det lykkedes desværre ikke alligevel. Prøvede at tilføje en ny id, men det har jeg droppet.
Får samme fejlmeddelelse som før.

Ja, vil også mene at det du skriver er rigtigt. Ved ikke hvorfor den kommer frem med fejlmeddelelserne.
Avatar billede NegoZiatoR Nybegynder
13. november 2011 - 12:06 #8
måske du skal definere størelse på din INT ?

altså INT(10)

Ved ikke om den kan misforstå datatyper hvis man ikke definere størelsen ?
Avatar billede ny89 Nybegynder
13. november 2011 - 12:08 #9
Jeg har fundet det her:

1. Both tables must be of the InnoDB table type.
2. The fields used in the foreign key relationship must be indexed.
3. The fields used in the foreign key relationship must be similar in data type.
(http://www.techrepublic.com/article/an-introduction-to-foreign-keys-and-referential-integrity-in-mysql/6035435)

#Punkt 3: hvorfor må de ikke være ens? Hvordan skal jeg så lave en relation mellem dem? Troede det var via id?
Avatar billede ny89 Nybegynder
13. november 2011 - 12:12 #10
Jeg havde ikke sat INT til noget, PhpMyAdmin har automatisk sat den til 11. Nu har jeg prøvet at ændre til 10 i tabel 2, for at ændre data typen, men det har vist ingen betydning.
Avatar billede ny89 Nybegynder
13. november 2011 - 12:14 #11
Hvad ligner INT - kan være jeg bliver nødt til at ændre det?
Avatar billede NegoZiatoR Nybegynder
13. november 2011 - 12:20 #12
Du kan prøve med Bigint..

Det er også en int, bare større..

Det virker mærkeligt.. hvordan ser dit INSERT statement ud ?

Punkt 3 --> Det står at de SKAL være af samme datatype :)

Men du skal huske at indsætte i det table der har primær nøgle først før du kan indsætte i table der holder foreignkey..
Avatar billede ny89 Nybegynder
13. november 2011 - 12:23 #13
Hov, du har ret :) Retter lige tilbage.

Begge tabeller har primær nøgle.
Avatar billede ny89 Nybegynder
13. november 2011 - 12:27 #14
Tabel 1 navn_id:
$sql = "INSERT INTO $brugere VALUES ('$navn_id', '$navn', '$brugernavn' .....)";

Fra tabel 2 adresse_id:
$sql2 = "INSERT INTO $Adresse VALUES ('$Adresse_id', '$Adresse')";
Avatar billede ny89 Nybegynder
13. november 2011 - 12:32 #15
Havde lige overset, at jeg har fået denne fejlmeddelelse, når jeg tilføjede index:
The indexes PRIMARY and navn_id seem to be equal and one of them could possibly be removed.
Avatar billede NegoZiatoR Nybegynder
13. november 2011 - 12:42 #16
du mangler da et felt i $brugere der referer til adresse ?

Tabel 1 navn_id:
$sql = "INSERT INTO $brugere VALUES ('$navn', '$brugernavn', '$Adresse_id' .....)";

Fra tabel 2 adresse_id:
$sql2 = "INSERT INTO $Adresse VALUES ('$Adresse')";

har fjernet begge id'er i din insert da de begge to er AUTO INCREMENT ?

Jeg ville nok lave en Procedure til at gøre det.

DELIMITER $$

CREATE PROCEDURE `userprocedure`(in navn_ varchar(255), in brugernavn_ varchar(255), in adresse_ varchar(255))
BEGIN
INSERT INTO Adresse(adresse) VALUES (adresse_);
INSERT INTO INSERT INTO Brugere (navn, brugernavn, adresse_id .....)" VALUES(navn_, brugernavn_,(select max(adresse_id) AS adresse_ID FROM Adresse));
END
Avatar billede ny89 Nybegynder
13. november 2011 - 12:53 #17
Betyder det at alt det jeg skriver i tabel to under feltet adresse, bliver identificeret i tabel 1 under $Adresse_id ? Og ved hvilket navn, brugernavn har relation til en bestemt adresse?

Jeg vil prøve at ændre det :) , men skal først få tilføjet foreign key, som stadig driller bl.a. med index.
Avatar billede ny89 Nybegynder
13. november 2011 - 13:22 #18
Kan det være at navn og adresse skal sættes til index og ikke id?
Avatar billede NegoZiatoR Nybegynder
13. november 2011 - 13:29 #19
Tror ikke at indexeringen skaber problemer..

Syntes også det er mærkeligt den siger du SKAL lave index, for det mener jeg ikke du skal.

Er lidt blank over hvorfor det ik' virker desværre :/
Avatar billede ny89 Nybegynder
13. november 2011 - 13:37 #20
Okay, men mange tak for dit forsøg og den tid du lagde i det. Send et svar, så får du point :)
Avatar billede NegoZiatoR Nybegynder
13. november 2011 - 13:52 #21
Okay .. :)

Håber du finder en løsning .. :)
Avatar billede ny89 Nybegynder
13. november 2011 - 13:55 #22
Ja, håber jeg også :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester