SQL Server 是否始终通过外键约束强制执行引用完整性?

问题描述 投票:0回答:1

换句话说,是否有可能创建一种存在孤儿记录且不再存在父记录的情况?

想象一下无法使用

ON DELETE CASCADE
并在父表上使用
INSTEAD OF DELETE
触发器的情况。如果我的
IOD
触发器定义得不好,在删除父记录之前没有正确清理所有子记录,SQL Server 会允许这种情况发生吗?或者它会意识到删除父项会留下一个孤立的子项并抛出异常吗?

我使用 MS SQL Server 2016,我想知道我是否可以总是盲目依赖外键上的左连接(正确定义为外键约束)而不在右侧表中创建任何空记录。

sql-server foreign-keys sql-server-2016
1个回答
0
投票

好吧,再想一想,我可以回答我自己的问题。子表通过外键的

ON DELETE XY
设置控制是否可以删除父记录。因此,如果我没有在子表上设置
ON DELETE CASCADE
,并且父表上的
IOD
触发器在尝试删除父记录之前没有删除子记录,那么父记录的删除将会被阻止。这是因为隐式默认设置是
ON THE DELETE NO ACTION

连接示例的意思是:“我能否确保外键关系中的每个子记录始终存在相应的父记录”

© www.soinside.com 2019 - 2024. All rights reserved.