级联删除和更新的优点和缺点是什么?

时间:2010-08-26 19:56:21

标签: sql-server-2008 cascade cascading-deletes

也许这是一个天真的问题......但我认为我们应该总是进行级联删除和更新。但我想知道它是否有问题,何时不应该这样做?我现在真的想不到一个你不想进行级联删除的情况,但我确信有一个......但是如果更新应该总是这么做呢?

那么有人可以列出级联删除和更新的优缺点吗?感谢。

4 个答案:

答案 0 :(得分:9)

优点:

  • 从Parent表中删除行时,将删除所有外键行
  • 这通常比使用触发器
  • 实施此操作更快
  • 孤儿行不太可能

缺点

  • 孤儿是可能的
  • 如果您错误地删除了父表中的一行,则相应子表中的所有行都将被删除,而PITA将会删除您删除的内容

答案 1 :(得分:7)

这取决于表中包含的实体:如果外键的一侧在没有主键一侧的情况下不能存在,则有级联删除是有意义的。

电子。 g。:如果发票被删除,发票行项目无权生存。

但如果你有一个用于关系的外键“适用于”员工与他/她的老板之间的关系,你是否想在老板离开公司时删除该员工?

此外:技术问题是,如果依赖表条目发生更改而某些ORM(对象关系映射)工具发生变化,则不会对它们负责。

答案 2 :(得分:1)

优点:

  • 数据完整性 - 可以帮助避免记录引用不再存在的情况。

缺点:

  • 性能 - 级联删除/更新可以是sloooooooooooooooooooow。
  • 复杂性 - 似乎我工作的大多数人都不习惯级联,所以当你给他们一个新的项目时,他们第一次触发其中一个级联时会有点惊讶。
  • 正如其他人已经提到的那样,如果使用不当,可能会搞砸了。

答案 3 :(得分:0)

Pro:它允许您减少执行删除操作所需的SQL语句数量。

Con:您可以删除稍后可能对审核很重要的数据。因此,即使父行已被删除,保持它也很重要。在这种情况下,外键应该接收NULL值,例如。