我有一个表,其中一个primary key
和一个引用same table primary key
的foreign 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;