优秀的编程知识分享平台

网站首页 > 技术文章 正文

SQLite3:外键约束在命令行里不起作用,Navicat却无法插值

nanyue 2024-12-05 15:02:06 技术文章 9 ℃

这两天初学 SQLite3,测试了一下外键(foreign key),结果在 Navicat 里死活插不进去值,无论插值是否正确都报「Foreign key mismatch」错误。更诡异的是,在命令行里却不管什么值都能插入(INSERT INTO),无论对错。

研究了一下,发现是这么回事:

SQLite3 默认不开启外键约束

在命令行里输入【 sqlite> PRAGMA foreign_keys;】回车可知,结果为 0,表示未开启外键约束。

开启也很简单,输入【 sqlite> PRAGMA foreign_keys = on;】回车即可。


开启之后,再输入错值,此时就会提示插值失败。

但此时插入正确的值,Navicat 仍然报错,这又是为什么?上网一顿搜索之后,才发现问题的关键。

被关联的数据列必须是主键或唯一键

解决方法也很简单,如果被关联的列(column)不是主键(PRIMARY KEY),将其设置为唯一键(UNIQUE)即可。

原以为自己之前用过 MySQL 就能轻松搞定 SQLite,看来水平还是不够,得认真学习了。

最近发表
标签列表