Подтвердить что ты не робот

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.

Он не показывает никаких ошибок.

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

4b9b3361

Ответ 1

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

PRAGMA foreign_keys = ON;

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

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

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

Ответ 3

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

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