您的问题可能是尚未启用外键支持。为此,您可能需要发布/运行
pragma foreign_keys = ON;
按:
2。启用外键支持
为了在sqlite中使用外键约束,库必须是
编译时既不使用sqlite_omit_foreign_key也不使用sqlite_omit_触发器
定义。如果定义了sqlite_omit_触发器,但sqlite_omit_foreign_键
不是,则sqlite的行为与版本3.6.19之前的行为相同
(2009-10-14)-分析外键定义并可以查询
使用pragma foreign_key_list,但外键约束不是
强制执行的pragma foreign_keys命令在此中是一个no操作
配置。如果定义了省略外键,则外键
甚至无法分析定义(试图指定外键
定义是语法错误)。
假设在编译库时启用了外键约束,
应用程序在运行时仍必须启用它,使用
pragma foreign_keys命令。例如:
sqlite> PRAGMA foreign_keys = ON;
默认情况下禁用外键约束(用于向后
兼容性),因此必须分别为每个数据库启用
连接。(但是,请注意,sqlite的未来版本可能
更改为默认启用外键约束。小心
开发商不会对是否是外国公司做出任何假设
默认情况下,键是启用的,但将作为
必要的。)应用程序还可以使用pragma foreign_键
语句来确定当前是否启用外键。这个
下面的命令行会话演示了这一点:
sqlite> PRAGMA foreign_keys;
0
sqlite> PRAGMA foreign_keys = ON;
sqlite> PRAGMA foreign_keys;
1
sqlite> PRAGMA foreign_keys = OFF;
sqlite> PRAGMA foreign_keys;
0
提示:如果命令“pragma foreign_keys”不返回数据,而是返回
包含“0”或“1”的单行,则为
使用不支持外键(因为它比
3.6.19或因为它是用sqlite_omit_foreign_key或定义的sqlite_omit_触发器编译的)。
无法在中启用或禁用外键约束。
多语句事务的中间(当sqlite不在
自动提交模式)。尝试这样做不会返回错误;它
根本没有效果。
SQLite Foreign Key Support