删除父键时,不会删除子键

时间:2017-09-29 17:17:58

标签: sqlite

我通过SQLite创建了一个数据库,如下所示:

enter image description here

我创建了一个名为books的表格,如下所示:

CREATE TABLE books (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "title-book" TEXT, witer TEXT, comment TEXT, "intro-img" TEXT, "avalable-count" integer, "total-count" integer, "publisher-id" INTEGER REFERENCES publisher (id) ON DELETE CASCADE ON UPDATE CASCADE, "category-id" INTEGER REFERENCES categories (id) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY ("publisher-id") REFERENCES publisher (id) ON DELETE CASCADE ON UPDATE CASCADE);

当我删除作为书籍category-id的父键的类别时,我会看到包含该子类的子行键的表格没有删除,并且它们存在,如下图所示:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

SQLite 3.6.19及更早版本不支持外键。 如果您有更新的版本,可以使用以下方法检查支持:

PRAGMA foreign_keys

如果它返回“无数据”,则表示没有安装支持(因为它是使用SQLITE_OMIT_FOREIGN_KEY或SQLITE_OMIT_TRIGGER定义编译的),而返回0表示“支持但禁用”(默认)和< strong> 1表示“支持并启用”。

您可以在运行时使用

启用
PRAGMA foreign_keys = ON;

请注意,必须为每个数据库连接启用此功能:

  

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

还要考虑:

  

无法在多语句事务中启用或禁用外键约束(当SQLite未处于自动提交模式时)。试图这样做不会返回错误;它根本没有效果。

参考:https://sqlite.org/foreignkeys.html