外键约束 - 如何删除引用的记录?

时间:2018-01-31 10:58:49

标签: sql sql-server tsql

我偶然发现了一个非常基本的问题,因此并没有真正考虑过这个问题。

我有两张桌子,让我们说:

Table1: col1 PK,
Table2: col1 FK references Table1(col1)

当我想从Table1中删除Table2中的记录时,SQL会抛出错误,DELETE语句与约束共同构成。这是可以理解和期望的行为。

如果我真的想删除引用密钥被删除的所有行中Table2NULL的行并设置引用,该怎么办?

我知道我可以手动执行 - 将Table2中的引用设置为NULL然后删除。但是有更简洁的方法吗?

3 个答案:

答案 0 :(得分:3)

您可以通过添加删除规则set to nullonDeleteCascade

来更改数据库结构

答案 1 :(得分:3)

您可以通过在FK关系上设置Set Null选项来配置插入和更新规范规则。我从Sql Server Management Studio附加了一个图像。此外,还有一篇有用的文章here.

enter image description here

答案 2 :(得分:1)

我发布这个答案作为替代方案,实际上解决了在Table2中取消外键引用的需要。您可以考虑对Table1中的记录执行 soft 删除。这意味着您将维护一个新列deleted,如果记录被逻辑删除,该列将设置为true。

此方法的优点是您可以将Table2中的所有子记录完整保留,包括其引用。但从逻辑上讲,Table1中的记录可以视为已删除。如果空间是一个问题,这不是一个选择,例如,如果你真的需要从表中删除记录。