我的SQLite数据库存在问题,尤其是下表:
CREATE TABLE foo (
key INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE bar (
_id INTEGER PRIMARY KEY,
key INTEGER NOT NULL,
what TEXT NOT NULL,
else TEXT,
FOREIGN KEY (key) REFERENCES foo (key) DEFERRABLE INITIALLY DEFERRED
);
如果我以正确的方式理解SQLite文档,尝试在bar
中插入与foo
表中的任何行不对应的行应该会失败并且会出现错误或其他内容。
不幸的是,即使foo
中没有关键字42存在,
INSERT INTO bar (key, what, else) VALUES (42, "something", "else");
这将在bar
中创建一个具有给定值(key = 42)的行,而foo
中没有带有键42的行。
是我还是这里有什么问题?
答案 0 :(得分:-1)
由@kijin在Does SQLite3 not support foreign key constraints?
上发布在SQLite 3.x中,每次连接到SQLite数据库时都必须进行以下查询:
PRAGMA foreign_keys = ON;
否则SQLite将忽略所有外键约束。
为什么每次都这样?根据文档,向后兼容SQLite 2.x.
在SQLite 4.x中,默认情况下将启用FK约束。