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



我有一个表,其中一个primary key和一个引用same table primary keyforeign key。即父母和孩子在同一张桌子上。在sql服务器中,删除规则有三个选项。但只能设置"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;

最新更新