我通过SQLite创建了一个数据库,如下所示:
我创建了一个名为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
的父键的类别时,我会看到包含该子类的子行键的表格没有删除,并且它们存在,如下图所示:
答案 0 :(得分:1)
SQLite 3.6.19及更早版本不支持外键。 如果您有更新的版本,可以使用以下方法检查支持:
PRAGMA foreign_keys
如果它返回“无数据”,则表示没有安装支持(因为它是使用SQLITE_OMIT_FOREIGN_KEY或SQLITE_OMIT_TRIGGER定义编译的),而返回0表示“支持但禁用”(默认)和< strong> 1表示“支持并启用”。
您可以在运行时使用
启用PRAGMA foreign_keys = ON;
请注意,必须为每个数据库连接启用此功能:
默认情况下禁用外键约束(为了向后兼容),因此必须为每个数据库连接单独启用。
还要考虑:
无法在多语句事务中启用或禁用外键约束(当SQLite未处于自动提交模式时)。试图这样做不会返回错误;它根本没有效果。