SQLite может удалить указанную строку, если установлено значение ON DELETE RESTRICT

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

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

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

DELETE FROM Storage WHERE StoragePk is $1

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

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

Мой полный код таков:

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');
        }
    });
});

Это разрешается как «ОК», когда я называю это storageId ссылочной строки.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

PRAGMA foreign_keys = ON

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

Другие вопросы по теме