我偶然发现了一个非常基本的问题,因此并没有真正考虑过这个问题。
我有两张桌子,让我们说:
Table1: col1 PK,
Table2: col1 FK references Table1(col1)
当我想从Table1
中删除Table2
中的记录时,SQL会抛出错误,DELETE
语句与约束共同构成。这是可以理解和期望的行为。
如果我真的想删除引用密钥被删除的所有行中Table2
到NULL
的行并设置引用,该怎么办?
我知道我可以手动执行 - 将Table2
中的引用设置为NULL
然后删除。但是有更简洁的方法吗?
答案 0 :(得分:3)
您可以通过添加删除规则set to null
或onDeleteCascade
答案 1 :(得分:3)
您可以通过在FK关系上设置Set Null
选项来配置插入和更新规范规则。我从Sql Server Management Studio附加了一个图像。此外,还有一篇有用的文章here.
答案 2 :(得分:1)
我发布这个答案作为替代方案,实际上解决了在Table2
中取消外键引用的需要。您可以考虑对Table1
中的记录执行 soft 删除。这意味着您将维护一个新列deleted
,如果记录被逻辑删除,该列将设置为true。
此方法的优点是您可以将Table2
中的所有子记录完整保留,包括其引用。但从逻辑上讲,Table1
中的记录可以视为已删除。如果空间是一个问题,这不是一个选择,例如,如果你真的需要从表中删除记录。