为什么FOREIGN KEY外键约束失效,关联表不存在的值仍可插入?
问题原因
你遇到的外键约束不生效问题,核心原因是你使用的SQLite数据库默认关闭了外键约束校验功能。出于旧版本兼容性的设计考虑,SQLite即便识别到建表语句中的外键定义,也不会默认对插入、更新操作做关联合法性校验,因此才会出现插入Student表中不存在的StudentId也能执行成功的情况。从你给出的查询结果用|分隔的输出格式来看,也符合SQLite的默认输出特征。
修复方案
- 在执行所有业务SQL前,先运行开启外键校验的配置语句:
PRAGMA foreign_keys = ON;
- 该配置属于连接级生效配置,仅对当前数据库连接生效,每次新建连接都需要重新执行,连接关闭后配置会自动失效。
将上述语句放在你所有SQL代码的最开头重新运行,此时插入StudentId=2001的语句就会触发外键约束违反的错误,无法正常插入。
内容的提问来源于stack exchange,提问作者gpvt
相关产品推荐
相关产品推荐

