SQLite:ON DELETE CASCADE无法正常工作

时间:2018-09-07 15:59:18

标签: sqlite

我经常尝试,也浏览了其他论坛帖子,但它们并没有帮助我。 这是我的问题:我这样创建表:

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'。

1 个答案:

答案 0 :(得分:0)

默认情况下,外键约束不处于活动状态。您必须使用以下命令启用它们,每个数据库会话一次:

PRAGMA foreign_keys = ON;

来自Official Doc

  

2。启用外键支持

     

假设在编译库时启用了外键约束,   应用仍必须在运行时使用   PRAGMA foreign_keys命令。例如:

sqlite> PRAGMA foreign_keys = ON;
     

默认情况下,禁用外键约束(用于后退   兼容性),因此必须分别为每个数据库启用   连接。