Merkwürdiges Verhalten: MySQL 4.1.18 und FOREIGN KEYs

Merkwürdiges Verhalten: MySQL 4.1.18 und FOREIGN KEYs

am 16.04.2006 12:25:19 von Alex Tugarev

Hallo 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

Re: Merkwürdiges Verhalten: MySQL 4.1.18 und FOREIGN KEYs

am 16.04.2006 12:35:10 von Alex Tugarev

Okay, ich glaube ich habe den Fehler gefunden.

Leider habe ich zufälligerweise immer auf einer Testdatenbank gearbeitet
und es existierte bereits ein CONSTRAINT mit dem selben Namen.

Dann muss ich mich später informieren, warum man keine gleichnamigen FKs
innerhalb einer DB halten kann, aber damit will ich hier niemanden
aufhalten.

Problem hat sich erledigt.


Schöne Grüße

AT