我有一张primary key
和一张引用foreign key
的same 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;