sql - 删除带有自引用外键的行

标签 sql mysql foreign-keys

我有一个 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/

相关文章:

SQL帮助: COUNT aggregate,条目列表及其评论计数

MySQL按特定数据条目对数据进行排序

mysql - MySQL 中何时使用单引号、双引号和反引号

php - 引用多个外键php mysql

mysql - 创建一个属于多于 2 个模型的关系

Java 和prepareStatement 与MySQL

sql - 我如何调整此查询以生成显示随时间推移按月计算平均值的结果

sql - "CONTAINS"是否有任何 MySQL 聚合函数?

entity-framework - Entity Framework EntityKey/外键问题

c# - 在数据库中保留数据更改的历史记录