当前位置: 首页 > 面试题库 >

使用自引用外键删除行

简培
2023-03-14
问题内容

我有一个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列的定义不为null,因此也无法将ThreadId临时设置为其他值以删除该行。有没有一种方法可以删除行而不更改表的定义或删除整个表?


问题答案:

您可以使用以下查询临时禁用外键约束:

SET foreign_key_checks = 0;


 类似资料:
  • 问题内容: 这与这个问题有些相关: 我有一个带有主键的表,并且我有几个表引用该主键(使用外键)。我需要从该表中删除行,在该表中其他任何表(以及其他一些约束)中都未引用主键。 例如: 等等。组中的某些行在任何表中均未引用,因此我需要删除这些行。除此之外,我需要知道如何查找所有在Group中引用给定行的表/行。 我知道我可以查询每个表并检查groupid,但是由于它们是外键,所以我想有一种更好的方法。

  • 问题内容: 一般来说,我对Web应用程序和数据库内容还是陌生的,所以这可能是一个愚蠢的问题。我想制作一个模型(“ CategoryModel”),其字段指向模型的另一个实例(其父实例)的主ID。 我该怎么做呢?谢谢! 问题答案: 你可以将模型名称作为字符串传递给ForeignKey,这将做正确的事情。 所以: 或者你可以使用字符串“ self”

  • 使用alter命令,我添加了主键和外键 alter table employee1添加主键(eid); alter table accounts1 add foreign key(eid)REFERENCEEE1(eid); 错误: MySQL>alter table employee1删除约束eID; 错误1064(42000):您的SQL语法中有错误;查看将ponds与您的MySQL serv

  • 我正在尝试运行一个Spring Boot应用程序,但我有这个问题,我不知道原因。请注意,我想使用的是Mysql,而不是H2数据库 我的受抚养人

  • 问题内容: 我花了很多时间试图弄清楚如何在一段时间内为SQL Server上的递归主键实现 CASCADE ON DELETE 。我已经阅读了有关触发器,创建临时表等的信息,但是还没有找到适合我的数据库设计的答案。 这是一个Boss / Employee数据库示例,将用于演示目的: 如您所见,每个员工都有一个老板,同时也是一个员工。因此,在id / boss_id上存在PK / FK关系。 这是带

  • 问题内容: 我有一个表,表中定义了员工关系。IE 等等… 在高级ID是外键的主键表与refreence列EmpId相同的情况下,我想从该表中清除所有行而不删除任何约束。我怎样才能做到这一点? 需要像这样进行删除4、3、2、1 我怎样才能做到这一点 编辑: Jhonny的答案对我有用,但是哪个答案更有效。 问题答案: 我不知道我是否缺少某些东西,但是也许您可以尝试一下。