SQLite3不支持外键约束吗?

Abb*_*ani 25 sql database sqlite

我对SQLITE3有疑问.

我创建了2个表personsorders使用以下SQL脚本:

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>
Run Code Online (Sandbox Code Playgroud)

即使人员表是空的,也可以插入orders表中.

它没有显示任何错误.

这怎么可能.

kij*_*jin 57

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

PRAGMA foreign_keys = ON;
Run Code Online (Sandbox Code Playgroud)

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

为什么每次?使用SQLite 2.X向后兼容性,根据所述文档.

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

  • 刚刚遇到这个问题.这是最愚蠢的事情. (8认同)