SQLite может удалять ссылочную строку, когда установлено ON DELETE RESTRICT - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть таблица с таким столбцом:

FOREIGN KEY("StorageFk") REFERENCES "Storage"("StoragePk") ON DELETE RESTRICT

Когда я использую «Браузер БД (SQLite)», я не могу удалить строку, на которую ссылается этот внешний ключ, что я и хочу. Однако, когда я запускаю этот запрос в моем приложении node.js:

DELETE FROM Storage WHERE StoragePk is $1

($ 1 - заполнитель), строка удаляется. Когда я открываю DB Browser после этого, он сообщает мне, что некоторые внешние ключи указывают на несуществующую строку.

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

Мой полный код:

db.run('DELETE FROM Storage WHERE StoragePk is ?', storageId, function (err) {
    const changes = this.changes;
    db.close(() => {
        if (err) {
            reject(err);
        }
        else if (!changes) {
            reject(`Could not find Storage with id ${storageId}.`);
        }
        else {
            resolve('OK');
        }
    });
});

Это разрешает 'OK', когда я называю это storageId строки, на которую есть ссылка.

1 Ответ

0 голосов
/ 10 апреля 2019

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

PRAGMA foreign_keys = ON

Ссылка на документацию .

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