我对SQLITE3有疑问。
我使用以下SQL脚本创建了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
表。
它没有显示任何错误。
这怎么可能。
答案 0 :(得分:55)
在SQLite 3.x中,您必须在连接到SQLite数据库时进行以下查询每次:
PRAGMA foreign_keys = ON;
否则SQLite将忽略所有外键约束。
为什么每次都这样?根据{{3}}。
向后兼容SQLite 2.x.在SQLite 4.x中,FK约束为documentation。
答案 1 :(得分:2)
答案 2 :(得分:0)
您是否阅读过文档? main page表示它是在3.6.19版本中引入的。 link显示了如何使用外键(您的代码是正确的)。
您的代码是否会提供您省略的错误消息?您是否检查了文档中指定的所有前提条件?
答案 3 :(得分:0)
检查您的SQLite中是否启用了外键约束:http://sqlite.org/foreignkeys.html#fk_enable