SQLite: ON DELETE CASCADE не работает правильно - PullRequest
0 голосов
/ 07 сентября 2018

Я очень часто пробовал и просматривал другие посты на форуме, но они мне не помогли. Это моя проблема: я создаю таблицы следующим образом:

CREATE TABLE IF NOT EXISTS Parent
    (Id INTEGER PRIMARY KEY,
     Name STRING);
CREATE TABLE IF NOT EXISTS Child
    (Id INTEGER,
     Name STRING,
     ParentId INTEGER,
     PRIMARY KEY (Id, ParentId)
     FOREIGN KEY (ParentId) REFERENCES Parent (ParentId) ON DELETE CASCADE);

После этого я вставляю это:

INSERT INTO Parent (Id, Name) VALUES (1, 'Michael');
INSERT INTO Child (Id, Name, ParentId) VALUES (1, 'Paul', 1);

Хорошо! Теперь в каждой таблице есть строка с родителем и ребенком. Теперь я хочу удалить родителя:

DELETE FROM Parent WHERE Id = 1;

Что происходит? Строка в таблице 'Parent' больше не существует, но строка в таблице 'Child' все еще там, даже если я сказал: 'ON DELETE CASCADE'.

1 Ответ

0 голосов
/ 07 сентября 2018

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

PRAGMA foreign_keys = ON;

С Официальный документ :

2. Включение поддержки внешнего ключа

Предполагая, что библиотека скомпилирована с включенными ограничениями внешнего ключа, он все еще должен быть включен приложением во время выполнения, используя Команда PRAGMA foreign_keys. Например:

sqlite> PRAGMA foreign_keys = ON;

Ограничения внешнего ключа по умолчанию отключены (для обратного совместимость), поэтому должны быть включены отдельно для каждой базы данных подключение.

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