我经常尝试,也浏览了其他论坛帖子,但它们并没有帮助我。 这是我的问题:我这样创建表:
CREATE TABLE IF NOT EXISTS Parent
(Id INTEGER PRIMARY KEY,
Name STRING);
CREATE TABLE IF NOT EXISTS Child
(Id INTEGER,
Name STRING,
ParentId INTEGER,
PRIMARY KEY (Id, ParentId)
FOREIGN KEY (ParentId) REFERENCES Parent (ParentId) ON DELETE CASCADE);
在那之后我插入:
INSERT INTO Parent (Id, Name) VALUES (1, 'Michael');
INSERT INTO Child (Id, Name, ParentId) VALUES (1, 'Paul', 1);
好的!现在,在每个表中都有一行,其中有一个父母和一个孩子。现在我要删除父项:
DELETE FROM Parent WHERE Id = 1;
发生了什么事?表'Parent'中的行不再存在,但是表'Child'中的行仍然存在,即使我说:'ON DELETE CASCADE'。
答案 0 :(得分:0)
默认情况下,外键约束不处于活动状态。您必须使用以下命令启用它们,每个数据库会话一次:
PRAGMA foreign_keys = ON;
来自Official Doc:
2。启用外键支持
假设在编译库时启用了外键约束, 应用仍必须在运行时使用 PRAGMA foreign_keys命令。例如:
sqlite> PRAGMA foreign_keys = ON;
默认情况下,禁用外键约束(用于后退 兼容性),因此必须分别为每个数据库启用 连接。