当设置ON DELETE RESTRICT时,SQLite能够删除引用的行

问题描述 投票:0回答:1

我有一个像这样的列的表:

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

当我使用“DB Browser(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时,这会解析为'OK'。

sql node.js sqlite foreign-keys
1个回答
0
投票

每次打开sqlite数据库时,都必须使用显式启用外键实现

PRAGMA foreign_keys = ON

Documentation link

© www.soinside.com 2019 - 2024. All rights reserved.