SQLite3不支持外键约束吗?

我有一个SQLITE3的问题。

我已经使用以下SQL脚本创build了2个表personsorders

 sqlite> create table Persons( P_Id int primary key, LastName varchar, FirstName varchar, Address varchar, City varchar ); sqlite> create table Orders( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id), FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) ); sqlite> insert into Orders values(1,77895,3); sqlite> select * from Orders; 1|77895|3 sqlite> 

即使人员表空行也可以插入到orders表中。

它不显示任何错误。

这怎么可能。

在SQLite 3.x中, 每次连接到SQLite数据库都必须进行以下查询:

 PRAGMA foreign_keys = ON; 

否则,SQLite将忽略所有外键约束。

为什么每一次? 根据文档 ,向后兼容SQLite 2.x。

在SQLite 4.x中, 默认情况下会启用 FK约束。

SQLite外键支持

 sqlite> PRAGMA foreign_keys = ON; 

这将启用外键约束。

看看你的SQLite中是否启用了外键约束: http : //sqlite.org/foreignkeys.html#fk_enable

你读过文档吗? 主页说它是在3.6.19版本中引入的。 该链接显示如何使用外键(您的代码是正确的)。

您的代码是否提供了您省略的错误消息? 你是否检查了文档中指定的所有先决条件?