SQLite3不支持外键约束吗?
我有一个SQLITE3的问题。
我已经使用以下SQL脚本创build了2个表persons
和orders
:
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版本中引入的。 该链接显示如何使用外键(您的代码是正确的)。
您的代码是否提供了您省略的错误消息? 你是否检查了文档中指定的所有先决条件?