换句话说,是否有可能创建一种存在孤儿记录且不再存在父记录的情况?
想象一下无法使用
ON DELETE CASCADE
并在父表上使用 INSTEAD OF DELETE
触发器的情况。如果我的 IOD
触发器定义得不好,在删除父记录之前没有正确清理所有子记录,SQL Server 会允许这种情况发生吗?或者它会意识到删除父项会留下一个孤立的子项并抛出异常吗?
我使用 MS SQL Server 2016,我想知道我是否可以总是盲目依赖外键上的左连接(正确定义为外键约束)而不在右侧表中创建任何空记录。
好吧,再想一想,我可以回答我自己的问题。子表通过外键的
ON DELETE XY
设置控制是否可以删除父记录。因此,如果我没有在子表上设置ON DELETE CASCADE
,并且父表上的IOD
触发器在尝试删除父记录之前没有删除子记录,那么父记录的删除将会被阻止。这是因为隐式默认设置是 ON THE DELETE NO ACTION
连接示例的意思是:“我能否确保外键关系中的每个子记录始终存在相应的父记录”