【问题标题】:SQLite won't throw error when inserting non-existing foreign key value [duplicate]插入不存在的外键值时SQLite不会抛出错误[重复]
【发布时间】:2016-12-17 14:34:14
【问题描述】:

我的 SQLite 数据库有一点问题,尤其是以下表格:

CREATE TABLE foo (
  key INTEGER PRIMARY KEY,
  name TEXT NOT NULL
);

CREATE TABLE bar (
  _id INTEGER PRIMARY KEY,
  key INTEGER NOT NULL,
  what TEXT NOT NULL,
  else TEXT,
  FOREIGN KEY (key) REFERENCES foo (key) DEFERRABLE INITIALLY DEFERRED
);

如果我以正确的方式理解 SQLite 文档,尝试在 bar 中插入与 foo 表中的任何行都不对应的行应该会失败并出现错误或其他问题。

不幸的是,即使foo 中不存在密钥 42,以下命令仍然有效:

INSERT INTO bar (key, what, else) VALUES (42, "something", "else");

这将在bar 中创建一个具有给定值(键 = 42)的行,而 foo 中不存在具有键 42 的行。

是我还是这里出了什么问题?

【问题讨论】:

  • 你设置了pragma PRAGMA foreign_keys = ON

标签: sqlite


【解决方案1】:

正如@kijin 在Does SQLite3 not support foreign key constraints? 上发布的那样

在 SQLite 3.x 中,每次连接到 SQLite 数据库时都必须进行以下查询:

PRAGMA foreign_keys = ON;

否则 SQLite 将忽略所有外键约束。

为什么每次?根据文档,向后兼容 SQLite 2.x。

在 SQLite 4.x 中,FK 约束将默认启用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 2015-12-12
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 2021-04-16
    相关资源
    最近更新 更多