Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 孩子';s键不';当我删除父密钥时,不会被删除_Sqlite - Fatal编程技术网

Sqlite 孩子';s键不';当我删除父密钥时,不会被删除

Sqlite 孩子';s键不';当我删除父密钥时,不会被删除,sqlite,Sqlite,我通过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 R

我通过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);
当我删除一个类别时,它是books
category id
的父键,然后我看到books表中包含该类别的子键行没有被删除,它们的存在与下图中的一样:


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

PRAGMA foreign_keys
如果它返回“无数据”,则表示没有安装支持(因为它是使用SQLITE\u OMIT\u FOREIGN\u KEY或SQLITE\u OMIT\u触发器定义编译的),而返回0表示“支持但禁用”(默认值),1表示“支持并启用”

您可以在运行时使用

PRAGMA foreign_keys = ON;
请注意,必须为每个数据库连接启用此选项:

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

还应考虑:

不可能在多语句事务的中间启用或禁用外键约束(当SQLite不在自动提交模式下)。尝试这样做不会返回错误;它根本没有效果


参考:

检查您的sqlite版本是否高于3.6.9,并且是否启用了外键。如果支持,命令“PRAGMA foreign_keys”应该返回0或1,而不是“no data”。更多信息:我尝试了以下代码:PRAGMA外键;返回0;我也使用这个代码:PRAGMA foreign_keys=ON;当然它是enable0意味着它被支持但被禁用(默认情况下),所以启用它并再次测试。另外,您需要为每个连接启用它。
外键约束在默认情况下是禁用的(为了向后兼容),因此必须为每个数据库连接单独启用。
这就行了!PRAGMA foreign_keys=ON;我的问题是PRAGMA外键被禁用。我的问题换成了这个问题,我想如果每次都使用PRAGMA foreign_keys=ON,我会将这个项目发送给客户;这个代码,怎么能让他从客户那里做这个?!我想让我的数据库在其他系统中正常工作我该怎么办?!如果您有一个设置初始数据库连接的配置文件,您可以将其添加到那里,以便在每次启动数据库连接时调用它