2

下面是场景

  • Table1( Id, Name)

  • Table2( Id, Name1, Name2, Type)

    • FK1:Name1参考Table1.Name_On delete cascade
    • FK2:Name2参考Table1.Name_On delete cascade

FK2抛出以下错误

错误:

在表 Table2 上引入 FOREIGN KEY 约束 FK2 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

但是,在我的场景中,无论实体是否Name1Name2删除,相应的条目都Table2应该被删除。

请帮助我了解这可能导致的问题是什么?

4

1 回答 1

2

FK2 不会导致循环,但会导致多个级联路径。从 Table2 中删除的记录将导致 Table1 中的行被删除两次,一次是针对每个已标记为级联删除的外键。这是设计不允许的。像你问的问题在这里得到了回答

“由单个 DELETE 或 UPDATE 触发的一系列级联引用操作必须形成不包含循环引用的树。在 DELETE 或 UPDATE 产生的所有级联引用操作的列表中,任何表都不能出现多次。此外,级联引用操作的树不能有多个路径到任何指定的表。树的任何分支在遇到没有指定或默认操作的表时结束。取自MSDN 库

于 2013-05-17T19:01:19.230 回答