O SQLite3 não suporta restrições de chave estrangeira?

Estou com um problema com o SQLITE3.

Eu criei 2 tabelas de persons e orders usando o seguinte script 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> 

Mesmo que a tabela de pessoas esteja vazia, linhas podem ser inseridas na tabela de orders .

Não mostra nenhum erro.

Como isso é possível.

No SQLite 3.x, você precisa fazer a seguinte consulta toda vez que se conectar a um database SQLite:

 PRAGMA foreign_keys = ON; 

Caso contrário, o SQLite irá ignorar todas as restrições de chave estrangeira.

Por que toda vez? Retrocompatibilidade com o SQLite 2.x, de acordo com a documentação .

No SQLite 4.x, as restrições FK serão ativadas por padrão .

Suporte a chave externa SQLite

 sqlite> PRAGMA foreign_keys = ON; 

Isso ativará a restrição de chave estrangeira.

Verifique se você tem restrições de chave estrangeira habilitadas em seu SQLite: http://sqlite.org/foreignkeys.html#fk_enable

Você leu a documentação? A página principal diz que é introduzida com a versão 3.6.19. O link mostra como usar foreign keys (seu código está correto).

Seu código fornece alguma mensagem de erro que você omitiu? Você verificou todas as condições prévias especificadas na documentação?