SQLite:ON DELETE CASCADE 无法正常工作

Gae*_*aem 3 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);
Run Code Online (Sandbox Code Playgroud)

之后我插入这个:

INSERT INTO Parent (Id, Name) VALUES (1, 'Michael');
INSERT INTO Child (Id, Name, ParentId) VALUES (1, 'Paul', 1);
Run Code Online (Sandbox Code Playgroud)

好吧!现在,我们在每个表中都有一行,其中有一个父项和一个子项。现在我想删除父级:

DELETE FROM Parent WHERE Id = 1;
Run Code Online (Sandbox Code Playgroud)

怎么了?表“Parent”中的行不再存在,但表“Child”中的行仍然存在,即使我说:“ON DELETE CASCADE”。

Tho*_*s G 6

默认情况下,外键约束未激活。您必须在每个数据库会话中使用以下命令启用它们:

PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)

来自官方文档

2.启用外键支持

假设该库是在启用外键约束的情况下编译的,则应用程序仍必须在运行时使用 PRAGMAforeign_keys 命令启用它。例如:

sqlite> PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)

默认情况下禁用外键约束(为了向后兼容),因此必须为每个数据库连接单独启用。