SQLite3 не поддерживает ограничения внешнего ключа?
У меня проблема с SQLITE3.
Я создал 2 таблицы persons
и orders
, используя следующий SQL script:
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
.
Он не показывает никаких ошибок.
Как это возможно.
Ответы
Ответ 1
В SQLite 3.x вы должны сделать следующий запрос каждый раз: вы подключаетесь к базе данных SQLite:
PRAGMA foreign_keys = ON;
В противном случае SQLite будет игнорировать все ограничения внешнего ключа.
Почему каждый раз? Обратная совместимость с SQLite 2.x, в соответствии с документацией .
В SQLite 4.x ограничения FK будут включены по умолчанию.
Ответ 2
Поддержка внешних ключей SQLite
sqlite> PRAGMA foreign_keys = ON;
Это позволит ограничить внешние ключи.
Ответ 3
Вы прочитали документацию? На главной странице указано, что она представлена с версией 3.6.19. Ссылка показывает, как использовать внешние ключи (ваш код верен).
Предоставляет ли ваш код какие-либо сообщения об ошибках, которые вы пропустили? Вы проверяли все предварительные условия, указанные в документации?
Ответ 4
Проверьте, есть ли в вашем SQLite ограничения внешнего ключа: http://sqlite.org/foreignkeys.html#fk_enable