我经常尝试并查看其他论坛帖子,但它们对我没有帮助。这是我的问题:我创建这样的表:
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”。
默认情况下,外键约束未激活。您必须在每个数据库会话中使用以下命令启用它们:
PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)
来自官方文档:
2.启用外键支持
假设该库是在启用外键约束的情况下编译的,则应用程序仍必须在运行时使用 PRAGMAforeign_keys 命令启用它。例如:
Run Code Online (Sandbox Code Playgroud)sqlite> PRAGMA foreign_keys = ON;默认情况下禁用外键约束(为了向后兼容),因此必须为每个数据库连接单独启用。
| 归档时间: |
|
| 查看次数: |
4992 次 |
| 最近记录: |