插入不存在的外键值时,SQLite不会抛出错误

时间:2016-12-17 14:34:14

标签: sqlite

我的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中创建一个具有给定值(key = 42)的行,而foo中没有带有键42的行。

是我还是这里有什么问题?

1 个答案:

答案 0 :(得分:-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约束。