【发布时间】:2017-01-09 16:22:24
【问题描述】:
我使用 sqlite3 并且有一个简单的表格
CREATE TABLE `data` (
`item_id` INTEGER,
`item` TEXT NOT NULL UNIQUE,
PRIMARY KEY(item_id)
);
插入一些值:
INSERT OR IGNORE INTO `data` (`item`) VALUES ('A'), ('A'), ('B');
这将导致:
`item_id` | `item`
----------+-------
1 | A
3 | B
是否有可能以正确的方式获得主键的增量:
`item_id` | `item`
----------+-------
1 | A
2 | B
【问题讨论】:
-
无法保证主键的连续性。这在大多数数据库中很常见,因为不仅可以删除行,而且还可以回滚事务——事务期间生成的所有主键都丢失了(并且另一个事务可能在另一个线程上并行运行,因此下一个 ID也不能只是回滚)。像往常一样,SQLite documentation on autoincrement is excellent.
-
试图重现,但我的 SQLite (3.11.0) 版本在该插入语句上引发“唯一约束失败”错误。你是如何避免这种情况的?
-
Ups.... 使用
INSERT OR IGNORE INTO .... -
如果您关心主键的值,而不仅仅是它具有唯一值,请不要使用自动增量主键。就这么简单。
标签: sqlite auto-increment