2011-03-04 61 views
4

我想创建一个数据库文件的对象和子对象。例如,删除后自动增量主键会发生什么?

第一个表格将用于存储更改的罐子。每个jar条目都会有一个自动增量的主ID键和有关jar的数据,比如高度,直径等等。

第二个表格将包含硬币。每个硬币都有一个ID(需要?),并且还会包含它所包含的jar的ID,它的数据(如数值,年份等)。

我的问题是当删除一个自动增量键时会发生什么?说你有4瓶:

,你删号2.请问剩下的罐子被重新编号123?或者会有差距?如果存在间隙,是否填充以便下一个创建的jar将具有2的ID?或者下一个仍然是5?

感谢

回答

7

您可以在sqlite的AUTOINCREMENT文档阅读有关:

通常的算法是给 新创建的行中的ROWID比在最大的ROWID较大的一个 表插入之前。如果 表最初是空的,则使用1的ROWID 。如果最大ROWID是 等于最大可能的整数 (9223372036854775807),那么 数据库引擎开始于随机 采摘 阳性候选的ROWID,直到找到了以前没有使用 之一。如果在尝试的合理编号 之后没有找到未使用的ROWID ,则插入操作 将失败并显示SQLITE_FULL错误。

总之,插入4行,删除所述第二,然后插入在端另一个之后,这些ID将是:

1 3 4 5

+0

谢谢,这正是我需要知道的!看起来它应该以我想要的方式工作。 – Matt 2011-03-04 20:13:58

+0

是的,它不会让我六分钟:) – Matt 2011-03-04 20:25:12

1

这取决于数据库实现。例如,MySQL在服务器启动时初始化自动增量计数器,然后将自动增量编号保存在内存中。所以,如果你添加10行到一个空表,然后删除它们,所有下一个自动增量数将是11不是1.

+0

Android使用sqlite。 – 2011-03-04 20:30:41