У меня есть таблица с таким столбцом:
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
ссылочной строки.
Каждый раз, когда вы открываете базу данных sqlite, вы должны явно включить принудительное применение внешнего ключа с помощью
PRAGMA foreign_keys = ON