如何在SQLite中设置AUTOINCREMENT字段的起始值?
答案 0 :(得分:88)
SQLite使用特殊的
SQLITE_SEQUENCE
表跟踪表所拥有的最大ROWID。只要创建包含AUTOINCREMENT列的普通表,就会自动创建并初始化SQLITE_SEQUENCE
表。可以使用普通的UPDATE,INSERT和DELETE语句修改SQLITE_SEQUENCE
表的内容。 但是对此表进行修改可能会扰乱AUTOINCREMENT密钥生成算法。在进行此类更改之前,请确保您知道自己在做什么。
我尝试了这个,它有效:
UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<table>'
其中 n +1是您想要的下一个ROWID, table 是表名。
答案 1 :(得分:24)
将value-1
显式插入表中,然后删除该行。
编辑:下一个评论向下,讨论直接编辑SQLITE_SEQUENCE
表可能更可取:https://stackoverflow.com/a/692871/10093
答案 2 :(得分:17)
我使用下面的查询解决了sqlite_sequence没有表记录时的问题(即第一条记录尚未添加到表中),否则会更新序列。
BEGIN TRANSACTION;
UPDATE sqlite_sequence SET seq = <n> WHERE name = '<table>';
INSERT INTO sqlite_sequence (name,seq) SELECT '<table>', <n> WHERE NOT EXISTS
(SELECT changes() AS change FROM sqlite_sequence WHERE change <> 0);
COMMIT;
答案 3 :(得分:6)
执行此操作的一种方法是插入第一行明确指定要以开头的行ID。然后SQLite将插入高于前一个最高的行ID。
答案 4 :(得分:4)
在使用SQLITE_SEQUENCE表的解决方案中,在第一次插入表中并添加了自动增量列后,似乎会添加此表中的条目。在某些情况下,这可能会导致麻烦(即自动增量仍然从1开始,而不是从想要的值开始)。
答案 5 :(得分:1)
只想在iTech非常感谢的答案中添加一些注释: