我有一张表,其中primary key
一张foreign key
引用了same table primary key
. 即同一张桌子上有父母和孩子。在 sql server 中,删除规则有三个选项。但只能设置"NO ACTION"
删除规则。"cascade" delete
我知道由于循环和链接,无法设置。但是为什么不允许其他选项?尤其是那个"SET NULL"
。
现在我必须手动执行此操作。我必须找到子记录并将外键设置为空。之后我可以删除父级。为什么不能为它设置规则?
我有一张表,其中primary key
一张foreign key
引用了same table primary key
. 即同一张桌子上有父母和孩子。在 sql server 中,删除规则有三个选项。但只能设置"NO ACTION"
删除规则。"cascade" delete
我知道由于循环和链接,无法设置。但是为什么不允许其他选项?尤其是那个"SET 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;