ON DELETE在自引用关系上设置NULL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ON DELETE在自引用关系上设置NULL相关的知识,希望对你有一定的参考价值。

我有一张primary key和一张引用foreign keysame table primary key的桌子。即在同一张桌子上有父母和孩子。在sql sever中,删除规则有三个选项。但它只能设置"NO ACTION"删除规则。据我所知,由于循环和链接,不可能设置"cascade" delete。但为什么不允许其他选择呢?特别是"SET NULL"之一。

现在我必须手动完成此操作。我必须找到子记录并将外键设置为null。之后我可以删除父母。为什么不能为它设置规则?

答案

因为它不能在同一个表上一起执行两个动作,它们是:

- 删除父级。

- 孩子们。

变异表是由UPDATE,DELETE或INSERT语句修改的表,或者是可能由DELETE CASCADE约束的效果更新的表。

您可以通过创建一个过程来克服这一过程,该过程将保存父键以删除记录并将子项设置为NULL。

procedure(parent_id) --takes the id as a parameter

   update table set null where foreign_key = parent_id;

   delete from table where id = parent_id;

end;

以上是关于ON DELETE在自引用关系上设置NULL的主要内容,如果未能解决你的问题,请参考以下文章

Spring boot delete 没有级联,它将外键设置为 null,然后在 null 约束上失败

Django 模型外键 on_delete=null 但外键还是被删除了

为啥实体框架 6 中仍未实现 ON DELETE SET NULL?有障碍吗?

多列外键:将单列设置为 Null “ON DELETE”而不是全部

1) 不能在 DELETE SET NULL 或 ON DELETE CASCADE 上创建外键 2) 不能在 DELETE CASCADE 上创建外键

django关系类型字段