Es ist ein MySQL "Gotcha" . Der erste Weg funktioniert NICHT.
FOREIGN KEY
Einschränkungen aus MySQL-Dokumenten :
Wichtig:
... 4 Absätze unten ...
Darüber hinaus erkennt oder unterstützt InnoDB keine „Inline-REFERENZEN-Spezifikationen“ (wie im SQL-Standard definiert), bei denen die Referenzen als Teil der Spaltenspezifikation definiert sind. InnoDB akzeptiert REFERENCES-Klauseln nur, wenn sie als Teil einer separaten FOREIGN KEY-Spezifikation angegeben werden. Bei anderen Speicher-Engines analysiert und ignoriert MySQL Server Fremdschlüsselspezifikationen.
Erstellen der 2 Tabellen (Weg 1):
CREATE TABLE parent_table (
parent_id int(11) not null auto_increment,
PRIMARY KEY(parent_id)
);
CREATE TABLE child1 (
id int(11) not null auto_increment,
parent_id int(11) REFERENCES parent_table(parent_id) ON DELETE CASCADE,
PRIMARY KEY(id)
);
Mal sehen, was ist child1
:
> SHOW CREATE TABLE child1 ;
delimiter $$
CREATE TABLE `child1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
Wo ist das FOREIGN KEY
? ... Vom Winde verweht (und ohne Vorwarnung)
Das Erstellen der Tabelle child2
(Weg 2) funktioniert einwandfrei:
CREATE TABLE child2 (
id int(11) not null auto_increment,
parent_id int(11),
PRIMARY KEY(id),
FOREIGN KEY(parent_id) REFERENCES parent_table(parent_id) ON DELETE CASCADE
);
> SHOW CREATE TABLE child2 ;
delimiter $$
CREATE TABLE `child2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `parent_id` (`parent_id`),
CONSTRAINT `child2_ibfk_1`
FOREIGN KEY (`parent_id`) REFERENCES `parent_table` (`parent_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$