SQLite3不支持外键约束吗?

时间:2012-03-30 05:59:32

标签: sql database sqlite

我对SQLITE3有疑问。

我使用以下SQL脚本创建了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表。

它没有显示任何错误。

这怎么可能。

4 个答案:

答案 0 :(得分:55)

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

PRAGMA foreign_keys = ON;

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

为什么每次都这样?根据{{​​3}}。

向后兼容SQLite 2.x.

在SQLite 4.x中,FK约束为documentation

答案 1 :(得分:2)

SQLite Foreign Key Support

sqlite> PRAGMA foreign_keys = ON;

这将启用外键约束。

答案 2 :(得分:0)

您是否阅读过文档? main page表示它是在3.6.19版本中引入的。 link显示了如何使用外键(您的代码是正确的)。

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

答案 3 :(得分:0)

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