ubuntuusers.de

Für diese Funktion musst du eingeloggt sein.

MySQL missachtet foreign key

Status: Gelöst | Ubuntu-Version: Ubuntu 9.10 (Karmic Koala)
Antworten |

Glocke

Avatar von 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:

1
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:

1
2
3
4
5
6
7
8
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

Avatar von 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)
Avatar von Glocke

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

Avatar von 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:

1
2
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)
Avatar von Glocke

Anmeldungsdatum:
1. März 2009

Beiträge: 880

Wohnort: Thüringen

michbeck4u schrieb:

1
2
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 😛

Antworten |