在Android中,我创建了一个包含一个表的SQLite数据库,该表又有一个自动增量ID列。
假设我有4条记录。当我删除所有这些时,下一个插入的记录的ID为第5个(4
),但我需要从第1个位置再次插入此记录,即0
。
我怎样才能做到这一点?
答案 0 :(得分:2)
编辑:也许我应该说清楚只是插入具有正确ID的行而不是操纵序列号 肯定 比以下方法更好。如果表中没有id = 3的行,即使在AUTOINCREMENT表中也可以在id中插入固定值。
也就是说,如果你 非常确定 ,你可以使用自动增量值设置为任何值;
UPDATE sqlite_sequence set seq=<next sequence no -1> where name=<table name>;
也就是说,如果你想在表'TableA'上的下一个插入中使用AUTOINCREMENT来生成5,你就可以了;
UPDATE sqlite_sequence set seq=4 where name='TableA';
请注意,重置seq
的行为与您的预期略有不同,这只是意味着生成的最低ID将是seq + 1
和max id still in the table + 1
中的较大者。
也就是说,如果删除所有值&gt; = 5,您可以将序列值重置为4并生成5作为下一个序列号,但如果表中仍有id 10,则生成的下一个数字将是11而不是。
也许我应该指出一个事实,即我无法在任何地方找到这种确切的行为,因此我不会依赖于每个未来版本的sqlite的行为。它现在有效,明天可能不会。
答案 1 :(得分:1)
试试这个
delete from your_table;
delete from sqlite_sequence where name='your_table';
SQLite使用特殊的SQLITE_SEQUENCE表跟踪表所拥有的最大ROWID。每当创建包含AUTOINCREMENT列的普通表时,都会自动创建并初始化SQLITE_SEQUENCE表。可以使用普通的UPDATE,INSERT和DELETE语句修改SQLITE_SEQUENCE表的内容。但是对此表进行修改可能会扰乱AUTOINCREMENT密钥生成算法。在进行此类更改之前,请确保您知道自己在做什么。
答案 2 :(得分:1)
在插入第5条记录之前重置表中的自动增量值:
SQL命令:
ALTER TABLE [tablename] AUTO_INCREMENT=[final value]