Löschen einer Zeile mit eine auf sich selbst verweisende foreign key

Ich habe eine MySQL-Tabelle, deren definition wie folgt:

CREATE TABLE `Gaestebuch` ( 
`Id` int(10) unsigned not NULL, 
`ThreadId` int(10) unsigned not NULL, 
PRIMARY KEY (`Id`), 
KEY `ThreadId` (`ThreadId`), 
- EINSCHRÄNKUNG `guestbook_ibfk_1` FOREIGN KEY (`ThreadId`) REFERENCES `Gaestebuch` (`Id`) 
) ENGINE=InnoDB; 

und derzeit gibt es nur 1 Zeile in der Tabelle:

mysql> select * from Gaestebuch; 
+-----+----------+ 
| Id | ThreadId | 
+-----+----------+ 
| 211 | 211 | 
+-----+----------+ 

Das problem ist, dass es keine Möglichkeit zum löschen dieser Zeile, ohne die Einschränkung.

mysql - > delete from Gaestebuch; 
ERROR 1451 (23000): Cannot delete-oder update a parent row: a foreign key constraint fails (`polaris`.`guestbook`, CONSTRAINT `guestbook_ibfk_1` FOREIGN KEY (`ThreadId`) REFERENCES `Gaestebuch` (`Id`)) 

Als die ThreadId Spalte not null definiert ist, ist es auch unmöglich die ThreadId auf einen anderen Wert vorübergehend löschen Sie die Zeile. Gibt es eine Möglichkeit zum löschen der Zeile ohne änderung der definition der Tabelle ein, oder löschen Sie die gesamte Tabelle?

  • Eine Zeile wird ein Kind Zeile für sich ist seltsam.
  • Wow, das ist einfach nur genial, Sie haben eine Tabelle erstellt Struktur, sobald es Zeilen, die Sie deaktivieren müssen Einschränkungen zum löschen der letzten Zeile. Schade, dass die ID nicht 22.
  • Ja, aber das kann immer passieren, mit jedem auf sich selbst verweisenden Fremdschlüssel. :$
  • stimmt, aber in der Regel die "parent-ID" null-Werte zulässt.
InformationsquelleAutor K J | 2011-01-01
Schreibe einen Kommentar