当两个表有互相引用的外键时,如何删除记录?

当两个表有互相引用的外键时,如何删除记录?

删除其中任何一条记录都会报这样的错误:

错误 1451 (23000):无法删除或更新父行:外键约束失败

如何克服这个问题?

答案1

你有没有尝试过:

UPDATE table1 SET reference=NULL;
DELETE FROM table2 WHERE id=1;
DELETE FROM table1 WHERE id=1;

通过清除引用,FK 约束不再是问题。

答案2

您有两个选择。一个是清除引用,正如 Gorilla 在他的帖子中指出的那样。您可以通过将引用设置为 null 或类似值来实现此目的,然后按正确的顺序删除帖子,但这不是您通常想要做的。

您可能想进行级联删除,但您的架构配置不正确。级联删除意味着引用您尝试删除的帖子的帖子也将被删除。

设置表以支持级联的语法如下所示:

CREATE TABLE car(
        car_id serial PRIMARY KEY,
        owner_id integer NOT NULL REFERENCES owner ON DELETE CASCADE);

如果您像这样设置表格,删除原始帖子(示例中的所有者)将导致删除所有引用的帖子(示例中的汽车)。您将避免手动清除引用并删除所有帖子。

根据数据库的类型,使用 ALTER TABLE 命令在模式中引入级联删除。

相关内容