我有一个 MySQL 表,其定义如下:
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;
目前表中只有 1 行:
mysql> select * from guestbook; +-----+----------+ | Id | ThreadId | +-----+----------+ | 211 | 211 | +-----+----------+
问题是没有办法在不破坏约束的情况下删除这一行。
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`))
由于 ThreadId 列定义为不为空,因此也不可能临时将 ThreadId 设置为不同的值来删除该行。有没有办法在不更改表定义或删除整个表的情况下删除行?
最佳答案
您可以使用此查询暂时禁用外键约束:
SET foreign_key_checks = 0;
关于sql - 删除带有自引用外键的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35671679/