× Für diese Funktion musst du eingeloggt sein.
MySQL missachtet foreign key
Status:
Gelöst
|
Ubuntu-Version:
Ubuntu 9.10 (Karmic Koala)
Antworten |
Glocke
Anmeldungsdatum: 1. März 2009
Beiträge: 880
Wohnort: Thüringen
Hallo,
ich benutze auf meinem lokalen Apache-Server einen MySQL-Server mit PhpMyAdmin-Interface.
Jedoch werden augenscheinlich Fremdschlüssel missachtet.
Nach Durchlauf des folgenden Skripts kommt
Ihr SQL-Befehl wurde erfolgreich ausgeführt.
anstelle einer Fehlermeldung. Eigentlich dürfte kein insert so möglich sein, da kein gültiger Wert für fooID existiert.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 create table Foo (
ID int not null primary key ,
anything varchar ( 5 )
);
create table Bar (
ID int not null primary key ,
fooID int not null
);
alter table Bar
add foreign key ( fooID ) references Foo . ID ;
insert into Bar
values ( '1' , '12' );
MySQL-Version:
mysql Ver 14 .14 Distrib 5 .1.37, for debian-linux-gnu ( i486) using EditLine wrapper
PhpMyAdmin-Version:
3.2.2.1
LG Glocke
PS: frohe Ostern
& wenn ich sie mit engine=InnoDB anlege bekomme ich:
Fehler
SQL-Befehl:
ALTER TABLE Bar ADD FOREIGN KEY ( fooID ) REFERENCES Foo.ID;
MySQL meldet: Dokumentation
#1005 - Can't create table 'projekt.#sql-5c1_2b6' (errno: 150)
michbeck4u
Anmeldungsdatum: 11. Juli 2006
Beiträge: 45
Wohnort: Berlin
Moin,
foreign Keys klappen bei mysql nur wenn beide Tables foreign keys unterstützen.
Die standard Engine MyISAM kann keine fk's
D.h. dein "alter table add fk...." wird einfach ignoriert.
Folglich musst du für beide Tables die Engine auf z.b. InnoDB ändern und dann kannst du den fk setzen und der insert sollte dann auch fehlschlagen.
viel erfolg ☺
Glocke
(Themenstarter)
Anmeldungsdatum: 1. März 2009
Beiträge: 880
Wohnort: Thüringen
☺
InnoDB hab ich eben auch probiert.
Dabei kommt der Fehler (siehe unten im ersten Post).
michbeck4u
Anmeldungsdatum: 11. Juli 2006
Beiträge: 45
Wohnort: Berlin
Joar...
dann gucken wir mal was perror zu deinem Fehler 150 sagt:
"MySQL error code 150: Foreign key constraint is incorrectly formed."
Deine FK definition sollte dann wohl eher so aussehen:
ALTER TABLE Bar ADD
CONSTRAINT ` fk_Bar_Foo ` FOREIGN KEY ( ` fooID ` ) REFERENCES ` Foo ` ( ` ID ` ) ON DELETE NO ACTION ON UPDATE CASCADE
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
Müsste so gehen 😉
Glocke
(Themenstarter)
Anmeldungsdatum: 1. März 2009
Beiträge: 880
Wohnort: Thüringen
michbeck4u schrieb:
ALTER TABLE Bar ADD
CONSTRAINT ` fk_Bar_Foo ` FOREIGN KEY ( ` fooID ` ) REFERENCES ` Foo ` ( ` ID ` ) ON DELETE NO ACTION ON UPDATE CASCADE
Okay danke. Also brauch ich CONSTRAINT wirklich 😀 kay 😛