如何设置外键约束使删除子表记录不删除主表记录
关于外键ON DELETE CASCADE的触发逻辑澄清
- 明确结论:子表的外键约束绝对不会出现「删除子表记录时删除对应主表记录」的情况,你之前的理解是完全正确的。
- ON DELETE CASCADE的触发方向是主表→子表:只有当你删除主表
MOTRIP中的某条记录时,数据库才会自动级联删除所有关联的子表PTINSPECTION中UID_MOTRIP匹配的记录。反过来,删除子表PTINSPECTION的记录时,主表MOTRIP的对应记录不会有任何变化——这是外键约束的核心逻辑:子表依赖主表的主键,主表并不依赖子表。 - 你创建的这条外键约束完全符合你的需求:
ALTER TABLE [dbo].[PTINSPECTION] WITH CHECK ADD CONSTRAINT [FK_PTINSPECTION_MOTRIP] FOREIGN KEY([UID_MOTRIP]) REFERENCES [dbo].[MOTRIP] ([UID_MOTRIP]) ON DELETE CASCADE - 那些声称「删子表会删主表」的回复要么是搞反了外键的依赖方向,要么是混淆了反向约束的场景(比如有人错误地在主表上创建了指向子表的外键,但这种设计本身违背了主从表的逻辑)。
内容的提问来源于stack exchange,提问作者John D
相关产品推荐
相关产品推荐

