Ho una tabella MySQL straniera autoreferenziale cui definizione è la seguente:Eliminazione di una riga con una chiave
CREATE TABLE `guestbook` ( `Id` int(10) unsigned NOT NULL, `ThreadId` int(10) unsigned NOT NULL, PRIMARY KEY (`Id`), KEY `ThreadId` (`ThreadId`), CONSTRAINT `guestbook_ibfk_1` FOREIGN KEY (`ThreadId`) REFERENCES `guestbook` (`Id`) ) ENGINE=InnoDB;
e attualmente c'è solo 1 riga nella tabella:
mysql> select * from guestbook; +-----+----------+ | Id | ThreadId | +-----+----------+ | 211 | 211 | +-----+----------+
Il problema è che non c'è modo di cancellare questa riga senza rompere il vincolo.
mysql> delete from guestBook; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`polaris`.`guestbook`, CONSTRAINT `guestbook_ibfk_1` FOREIGN KEY (`ThreadId`) REFERENCES `guestbook` (`Id`))
Siccome la colonna è stata definita ThreadId non nullo, è anche possibile impostare il ThreadId un valore diverso temporaneamente per eliminare la riga. C'è un modo per cancellare la riga senza cambiare la definizione della tabella o far cadere l'intera tabella?
Una riga che è una riga secondaria per se stessa è strana. – Chandu
Wow è semplicemente fantastico, hai creato una struttura a tabelle che una volta che ha le righe devi disattivare i vincoli per eliminare l'ultima riga. Peccato che l'ID non fosse 22. –
@Conrad: Sì, ma questo può sempre accadere con qualsiasi chiave esterna autoreferenziale. : $ –