SQLite version 3.7.9 2011-11-01 00:52:41
sqlite> PRAGMA foreign_keys = 1;
sqlite> CREATE TABLE foo(name);
sqlite> CREATE TABLE bar(foo_rowid REFERENCES foo(rowid));
sqlite> INSERT INTO foo VALUES('baz');
sqlite> SELECT rowid, name FROM foo;
1|baz
sqlite> INSERT INTO bar (foo_rowid) VALUES (1);
Error: foreign key mismatch

为什么会出现此错误?是DML error,但我不知道出了什么问题,因为:

  • 存在foo个.
  • 存在foo.rowid个.
  • foo.rowidfoo的主键,因此受限于唯一性.
  • bar.foo_rowid是一列,这与foo.rowid是一列的事实相匹配.

推荐答案

SQLite文档中关于外键的说明非常清楚:

The parent key must be a named column or columns in the parent table, not the rowid.

(见here页.)

您不能为此使用rowid,因此只需为表定义您自己的自动递增主键即可.

Database相关问答推荐

如何将 Scylla DB 中的计数器列重置为零?

数据库 struct 建议

嵌入式的 best数据库是什么?

如何使用 SQL Server 中的round方法将浮点数转换为 int?

动态数据模型

是否可以使用 Mongo 的 Object ID作为其唯一标识符?如果是这样,如何将其转换为字符串并按字符串查找?

一个 5MB 的 SQL 数据库可以存储多少数据?

从 activerecord 获取索引哈希

Joomla 数据库设置

有没有办法在一个脚本中创建多个触发器?

ORA-00060: deadlock detected while waiting for resource

SQL Server 2008 中的 Open Table go 了哪里?

在服务器上排序还是在客户端排序?

如何更改 MySQL DB 中所有表的前缀?

从旧数据 struct 到新数据 struct 的数据迁移

如何配置 NLog 以写入数据库?

MongoDB中的数据库数据大小

处理多个表的最佳实践

如何在android中使用合同类?

根据上次日期 Select 记录