以下代码应该IMO产生错误,因为user_id=1
它不存在。它为什么有效?
CREATE TABLE users (
user_id int PRIMARY KEY,
email text UNIQUE
);
CREATE TABLE claimed (
account_id int PRIMARY KEY,
user_id int,
domain text,
FOREIGN KEY (user_id) REFERENCES users (user_id)
);
INSERT INTO claimed
(user_id, domain)
VALUES (1, "abcd");
发布于 2019-05-30 10:57:13
从相关文件:
为了SQLite中使用外键约束,图书馆必须既没有被编译
SQLITE_OMIT_FOREIGN_KEY
或SQLITE_OMIT_TRIGGER
定义。如果SQLITE_OMIT_TRIGGER
已定义但未定义SQLITE_OMIT_FOREIGN_KEY
,则SQLite的行为与版本3.6.19(2009-10-14)之前的行为相同 - 解析外键定义并可使用查询PRAGMA foreign_key_list
,但不强制执行外键约束。
和:
默认情况下禁用外键约束(为了向后兼容),因此必须为每个数据库连接单独启用。
和:
假设在启用外键约束的情况下编译库,应用程序仍然必须在运行时使用该
PRAGMA foreign_keys
命令启用它。例如:sqlite> PRAGMA foreign_keys = ON;
显然你应该PRAGMA foreign_keys = ON
在连接的顶部使用,并且可能使用适当的选项进行重建(尽管如果你从包中安装,那么我个人会认为这已经完成)。
来源: Google sqlite foreign key
,第一个结果
https://stackoverflow.com/questions/-100006867
复制相似问题