SQL级联删除

5

我有一个关于级联删除和外键引用的问题: 假设有以下表:

ITEMX                 | ITEMY
------------------    | ------------
ID    FKID_ITEMY      | ID
1     1               | 1
2     1               |

在FKID_ITEMY上存在级联删除,如果我删除ITEMX中的一行,则将删除ITEMY中对应的项目。我的问题是:

删除ITEMX中ID为1的行是否会删除ITEMY中ID为1的行?

还是只会删除ITEMX中ID为1的行,因为ID为2的行仍然引用ITEMY中ID为1的行?

换句话说,当没有更多引用时,我希望看到ITEMY中ID为1的行被删除。级联删除能实现这一点吗?

1个回答

11

你把级联删除的概念理解反了

即使你将FKID_ITEMY声明为级联删除选项,但如果你删除ID=1的ITEMX,则什么也不会发生。

级联行为影响到如果在ITEMY中引用的行被删除时会发生什么。如果你删除ID=1的ITEMY,它将同时删除引用该行的两行ITEMX。

你在从属表中声明级联行为的外键上,因为你可能有另一个从属表ITEMZ,并且希望其行为不同。例如,如果你尝试删除ITEMY中的一行,则希望如果存在任何在ITEMZ中引用的行,则该操作将被取消。


这正是我所想的,但确认一下还是很好。我们拥有的模型有点古怪,但出于业务原因我们不得不这样做。我将在外键关系上放置级联并将FKID_ITEMY设置为ITEMY中已知的默认值。谢谢! - Jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接