在SQLite中为AUTOINCREMENT设置起始值

我如何设置SQLite的AUTOINCREMENT字段的起始值?

将值-1显式插入表中,然后删除该行。

从SQLite网站 :

SQLite跟踪使用特殊的SQLITE_SEQUENCE表的表曾经保存的最大ROWID。 SQLITE_SEQUENCE表是在创build包含AUTOINCREMENT列的普通表时自动创build和初始化的。 SQLITE_SEQUENCE表的内容可以使用普通的UPDATE,INSERT和DELETE语句修改。 但是对这个表进行修改可能会干扰AUTOINCREMENT密钥生成algorithm。 在进行这样的改变之前,确保你知道你在做什么。

我试过这个,它的工作原理:

 UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = '<table>' 

其中n +1是你想要的下一个ROWID, table是表名。

一种方法是插入第一行, 明确指定要开始的行ID 。 然后,SQLite将插入比以前更高的行ID。

我正在使用下面的查询,它解决了当sqlite_sequence没有表的logging(即第一个logging还没有添加到表),否则它更新序列的问题。

 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; 

在使用SQLITE_SEQUENCE表的解决scheme中,在添加了自动增量列的第一次插入表之后,似乎要添加到此表中。 在某些情况下,这可能会导致麻烦(即自动增量仍然从1开始,而不是从想要的值开始)。

现在我用这个作为我的解决scheme:

 REPLACE INTO sqlite_sequence (name, seq) VALUES ('<table>', <n>) 

这为我工作。 感谢上面的答案。