我想在子表中有一个 FK 约束,这样当我从子表中删除记录时,主记录不会被删除。
我确实在子表中创建了一个 FK 约束,ON DELETE CASCADE
认为当打算执行子表删除记录操作以及删除主表记录时,这只会删除子表记录。
我知道级联删除操作将/应该级联到子表。
ALTER TABLE [dbo].[PTINSPECTION] WITH CHECK
ADD CONSTRAINT [FK_PTINSPECTION_MOTRIP]
FOREIGN KEY([UID_MOTRIP])
REFERENCES [dbo].[MOTRIP] ([UID_MOTRIP])
ON DELETE CASCADE
这可能听起来很愚蠢,但是我在 Google 上搜索了有关级联删除的问题,有几个回复指出级联删除也会应用于主表(这意味着它会删除相应的父记录)。
这对我来说没有意义,这就是我问这个问题的原因......
子 FK 约束是否允许在删除子表记录时删除主记录?
所有知识的源泉都是手册——在创建表部分,FK 的相关细节是
删除时 { 无操作 | 级联 | 设置为空 | 设置默认值 }
如果所创建的表中的行具有引用关系,并且被引用的行已从父表中删除,则指定对这些行执行的操作。
级联
如果从父表中删除了该行,则相应的行也会从引用表中删除。
在此处输入链接描述
这样做的结果是(正如其他人指出的那样),您可能会陷入父级/引用行没有子级/引用行的情况。 SQLSERVER 没有内置实用程序来处理这个问题 - 但这是另一个问题。