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

时间:2015-03-27 09:17:33

标签: sql sql-server foreign-keys self-referencing-table

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

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

1 个答案:

答案 0 :(得分:1)

因为它不能在同一个表上同时执行两个操作:

- 删除父母。

- 更新孩子们。

  

变异表是由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;