【问题标题】:sqlite integer primary key not null constraint failedsqlite 整数主键非空约束失败
【发布时间】:2018-03-01 17:52:20
【问题描述】:

根据 SQLite 文档/常见问题解答,声明为 INTEGER PRIMARY KEY 的列如果省略,将自动获得该列的最高值 +1。
使用 SQLite 版本 3.22.0 2018-01-22 18:45:57
创建表如下:

CREATE TABLE test (
   demo_id INTEGER PRIMARY KEY NOT NULL,
   ttt VARCHAR(40) NOT NULL,
   basic VARCHAR(25) NOT NULL,
   name VARCHAR(255) NOT NULL,
   UNIQUE(ttt, basic) ON CONFLICT ROLLBACK
   ) WITHOUT ROWID;

然后像这样插入:

INSERT INTO test (ttt, basic, name) VALUES ('foo', 'bar', 'This is
 a test');

给予:

Error: NOT NULL constraint failed: test.demo_id
sqlite>

当预期创建一个 demo_id 值为 1 的记录时。即使表已经包含值,如果没有显式指定 id 也会导致插入行失败,并出现相同的错误。

我做错了什么?

【问题讨论】:

标签: sqlite


【解决方案1】:

documentation 表示您获得了 rowid 的自动递增值。但是你指定了WITHOUT ROWID

【讨论】:

  • 为避免混淆:此答案中的“自动增量”是比 SQLite 的 AUTOINCREMENT 关键字更广泛的术语。不过,两者都只能在 ROWID 表中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2021-12-28
相关资源
最近更新 更多