删除其中任何一条记录都会报这样的错误:
错误 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 命令在模式中引入级联删除。