如何减少android SQLite中的自动增量_id?

时间:2012-03-09 06:44:14

标签: android database sqlite

在Android中,我创建了一个包含一个表的SQLite数据库,该表又有一个自动增量ID列。

假设我有4条记录。当我删除所有这些时,下一个插入的记录的ID为第5个(4),但我需要从第1个位置再次插入此记录,即0

我怎样才能做到这一点?

3 个答案:

答案 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 + 1max 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]