SQLite插入违反外键约束数据无报错问题咨询
你遇到的现象不是对外键逻辑的理解存在错误,是SQLite本身的版本特性和默认配置导致的,具体原因如下:
- 版本兼容问题:你使用的SQLite 2.8.17版本本身不支持外键约束强制执行,建表语句中的外键声明仅做语法兼容处理,不会实际校验关联数据的存在性。
- 默认配置问题:即使升级到3.6.19及以上支持外键约束的SQLite版本,外键检查默认也是关闭状态,需要手动执行
PRAGMA foreign_keys = ON;开启,该配置仅对当前数据库连接会话生效。
你可以升级到高版本SQLite后按以下操作验证,即可触发预期的外键约束报错:
sqlite> PRAGMA foreign_keys = ON; sqlite> create table a (aid integer primary key, name text); sqlite> create table b (bid integer, aid integer, name text, foreign key(aid) references a(aid)); sqlite> insert into b values (1,1,'wtf'); Error: FOREIGN KEY constraint failed
内容的提问来源于stack exchange,提问作者Josh Vander Hook
相关产品推荐
相关产品推荐

