设置了ON DELETE RESTRICT的SQLite能够删除引用的行

时间:2019-04-10 08:47:00

标签: sql node.js sqlite foreign-keys

我有一张桌子,上面有这样一列:

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时,它解析为'OK'。

1 个答案:

答案 0 :(得分:0)

每次打开sqlite数据库时,都必须使用以下命令显式启用外键强制执行

PRAGMA foreign_keys = ON

Documentation link