【问题标题】:Understanding android sqlite auto increment field了解android sqlite自动增量字段
【发布时间】:2011-07-13 13:02:38
【问题描述】:

我的 android sqlite 数据库中有一个表。有一个字段“id”是自动递增主键。我的应用程序服务在表中每分钟插入一行。在某个时间点我正在删除条目超过 5 天。所以总条目是有限的。但是 id 正在增加。所以我对 id 的值感到困惑,因为它随着每个新条目而增加。当“id”字段超过最大值时会出现什么情况?该字段的最大值是多少?在这种情况下如何使用?我真的可以在这里使用自动增量字段吗?

表创建语句:

create table datausage (id integer primary key autoincrement,"
            + "date date not null,time text not null,level integer)

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    有关官方文档,请参阅this。最大可能的 ROWID 是 9223372036854775807,如果你每秒写 1000 个条目,它将持续超过 10675199116 天:我认为你不会有困难。

    当达到这一点时,数据库将开始挑选未使用的 ID,所以您也可以。

    使用自动增量:这是您可用的最佳选择。

    编辑:另外,它被称为 AUTO INCREMENT 是有原因的。它应该会自动增加。

    【讨论】:

    • @Femi 这对于 SQLite 来说很好,但是当我们从数据库中获取数据时,主键的数据类型是 int 的 pojo(VO) 类呢?因为int数据类型范围从-2,147,483,648到2,147,483,64。那么在这种情况下我们是否必须考虑long数据类型?
    • 抱歉范围是 2,147,483,648 到 2,147,483, 647
    【解决方案2】:

    自动递增的主键将继续永远递增(在我们的术语中),并且不会替换已删除的记录。即使您删除旧记录,id 字段也会不断增加。

    正如其他答案中所述,该字段也有足够的空间。

    【讨论】:

    • 我的意思是它不会立即重叠。它会先等到最大值。
    • 谢谢,也给你一个赞成票(弗格斯·巴克),因为我不能接受两个答案。
    【解决方案3】:

    如果您想根据自己的逻辑放置自己的值,则无需使用自动增量,每次插入行时它都会增加值。相反,如果您想使用自动增量,您可以删除表并重新创建表。

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多