以下代码应导致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");
答案 0 :(得分:0)
为了在SQLite中使用外键约束,必须在未定义
SQLITE_OMIT_FOREIGN_KEY
或SQLITE_OMIT_TRIGGER
的情况下编译库。如果定义了SQLITE_OMIT_TRIGGER
但未定义SQLITE_OMIT_FOREIGN_KEY
,则SQLite的行为与版本3.6.19(2009-10-14)之前的行为相同-解析外键定义,并可以使用{{1 }},但不执行外键约束。
和:
默认情况下(为了向后兼容)禁用外键约束,因此必须分别为每个数据库连接启用外键约束。
和:
假定在编译库时启用了外键约束,则应用程序仍必须在运行时使用
PRAGMA foreign_key_list
命令将其启用。例如:
PRAGMA foreign_keys
显然,您应该在连接的顶部使用sqlite> PRAGMA foreign_keys = ON;
,并可能使用适当的选项进行重建(尽管如果您是从软件包中安装的,那么我个人认为这样做已经完成了。)
来源: Google PRAGMA foreign_keys = ON
,第一个结果