自动增量在sqlite数据库中可以使用递减整数字段吗?

时间:2011-06-15 13:53:57

标签: android sqlite decrement

我正在使用id为Integer主键或整数来获取我的数据。

但删除任何一行后......

之后,如果我们选择查询以显示所有内容。

但它会关闭力量,因为缺少一个id。

我希望该ID本身可以auto increment& decrement

当我删除末尾的记录(ig id = 7)之后我添加一行然后id必须是7而不是8.同样当我删除中间的一行(ig id = 3)然后所有行通过加入自动指定。

你的想法可以帮助我。

1 个答案:

答案 0 :(得分:0)

大多数具有自动递增列的系统会跟踪插入的最后一个值(或下一个要插入的值),并且不会重新发出一个数字(给出相同的数字两次),即使已删除最后发布的数字从表中。

从您的要求来看,SQLite是另一个这样的系统。

如果系统中存在任何并发性,那么这是有风险的,但对于单用户,单应用程序一次性系统,您可能会逃脱:

SELECT MAX(id_column) + 1 FROM YourTable

找到下一个可用值。根据SQLite的行为方式,您可以将其嵌入INSERT语句的VALUES列表中:

INSERT INTO YourTable(id_column, ...)
    VALUES((SELECT MAX(id_column) + 1 FROM YourTable), ...);

这可能行不通;你可能必须做两个操作。请注意,如果存在任何并发性,则两个语句形式是坏主意 TM 。主键唯一约束通常可以防止灾难,但是两个并发语句中的一个失败,因为它尝试插入另一个刚插入的值 - 因此它必须重试并希望最好。显然,手机的并发性比网络服务器少,因此问题相应地不那么严重。但要小心。

但总的来说,最好让序列中出现间隙而不必担心。通常没有必要担心它们。如果你必须担心差距,不要让人们首先制造它们。或者,当您执行创建一个行的删除时,移动现有行以填补空白。在添加新行时,最后仍会留下删除信息,这就是为什么最好克服“它必须是一个连续的数字序列”的心态。自动增量保证唯一性;它不保证连续性。