SQLite3 не поддерживает ограничения внешнего ключа? - PullRequest
25 голосов
/ 30 марта 2012

У меня проблема с SQLITE3.

Я создал 2 таблицы persons и orders, используя следующий скрипт 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>

Даже если таблица лиц пуста, в таблицу orders можно вставить строки.

Ошибка не отображается.

Как это возможно.

Ответы [ 4 ]

56 голосов
/ 30 марта 2012

В SQLite 3.x необходимо выполнять следующий запрос каждый раз, когда вы подключаетесь к базе данных SQLite:

PRAGMA foreign_keys = ON;

В противном случае SQLite будет игнорировать все ограничения внешнего ключа.

Почему каждый раз? Обратная совместимость с SQLite 2.x, согласно документации .

В SQLite 4.x ограничения FK будут включены по умолчанию .

2 голосов
/ 07 марта 2013

Поддержка внешнего ключа SQLite

sqlite> PRAGMA foreign_keys = ON;

Это включит ограничение внешнего ключа.

0 голосов
/ 30 марта 2012

Проверьте, включены ли ограничения внешнего ключа в SQLite: http://sqlite.org/foreignkeys.html#fk_enable

0 голосов
/ 30 марта 2012

Вы читали документацию? главная страница говорит, что она представлена ​​в версии 3.6.19.Ссылка показывает, как использовать внешние ключи (Ваш код правильный).

Дает ли ваш код сообщения об ошибках, которые вы пропустили?Вы проверили все предварительные условия, указанные в документации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...