Merkwürdiges Verhalten: MySQL 4.1.18 und FOREIGN KEYs
am 16.04.2006 12:25:19 von Alex TugarevHallo NG,
eigentlich dachte ich das Thema Foreign Keys bereits erfolgreich erfasst
zu haben. Leider war ich gerade bei einem Generaltest einer Applikation
im Rahmen der Installation eben an diesen FKs gescheitert, wobei ich bei
der Fehlersuche nicht mehr weiterkomme.
Bitte schaut euch folgendes Szenario an:
---
Ich nutze phpMyAdmin 2.8.0.3, aber auch mit dem MySQL Administrator
1.1.9 das selbe Fehlverhalten (vielleicht auch meinerseits *g*) auftritt.
---
Zunächst setze ich folgende Abfrage ab:
"----------------------------------------------------------- -----------
CREATE TABLE element (
id int(10) unsigned NOT NULL auto_increment,
parent int(10) unsigned,
name varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY parent (parent),
CONSTRAINT fk_parent FOREIGN KEY (parent) REFERENCES element (id) ON
DELETE CASCADE ON UPDATE SET NULL
) ENGINE=InnoDB;
"----------------------------------------------------------- -----------
Darauf bekomme ich folgendes zu sehen:
"----------------------------------------------------------- -----------
MySQL meldet:
#1005 - Can't create table '.\awmstest\element.frm' (errno: 121)
"----------------------------------------------------------- -----------
Im zweiten Schritt lasse ich die FK Definition aus dem CREATE TABLE Satz
raus:
"----------------------------------------------------------- -----------
CREATE TABLE element (
id int(10) unsigned NOT NULL auto_increment,
parent int(10) unsigned,
name varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY parent (parent)
) ENGINE=InnoDB;
"----------------------------------------------------------- -----------
Das wird akzeptiert und ich nutze in der Beziehungsübersicht von
phpMyAdmin um folgenden Verweis einzurichten:
parent [ element -> id ] ON DELETE [ CASCADE ] ON UPDATE [ SET NULL ]
Daraufhin speichere ich diesen Verweis und wähle unter 'Exportieren' die
Tabelle "element" aus.
Folgende Struktur bekomme ich dann zu sehen:
"----------------------------------------------------------- -----------
--
-- Tabellenstruktur für Tabelle `element`
--
CREATE TABLE `element` (
`id` int(10) unsigned NOT NULL auto_increment,
`parent` int(10) unsigned default NULL,
`name` varchar(255) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`),
KEY `parent` (`parent`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci
AUTO_INCREMENT=1 ;
--
-- Constraints der exportierten Tabellen
--
--
-- Constraints der Tabelle `element`
--
ALTER TABLE `element`
ADD CONSTRAINT `element_ibfk_1` FOREIGN KEY (`parent`) REFERENCES
`element` (`id`) ON DELETE CASCADE ON UPDATE SET NULL;
"----------------------------------------------------------- -----------
Mir kommt das schon recht komisch vor.
Aber, wenn ich dieses Kopiere und nach dem Drop der Tabelle "element"
als SQL-Befehl ausführe, bekomme ich den obigen Fehler. Und hier
verstehe ich schon gar nicht, wo der Fehler sein könnte.
Bitte um Hilfe, es ist relativ dringend. Falls nocht irgendwelche
Details unklar sind, führe den Versuch gerne wieder durch.
Nochmals: Mit MySQL Administrator und MySQL Query Browser bekomme ich
das gleiche (Fehl-)Verhalten.
Schöne Grüße
AT