删除后自动增加主键会发生什么?

时间:2011-03-04 20:03:53

标签: android sqlite

我正在尝试使用对象和子对象创建数据库文件。例如,

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

第二张表将包含硬币。每个硬币都有一个ID(需要?),还有它所包含的罐子的ID和它的数据(如价值,年份等)。

我的问题是当一个被删除时自动增量键会发生什么?假设你有4个罐子:

1 2 3 4

你删除了2号。剩下的罐子会重新编号为123吗?还是会有差距?如果有间隙,是否填充,以便创建的下一个jar的ID为2?或者下一个仍然是5?

由于

2 个答案:

答案 0 :(得分:7)

您可以在sqlite AUTOINCREMENT文档中了解相关内容:

  

通常的算法是给出   新创建的行是一个ROWID   大于最大的ROWID   插入之前的表。如果   table最初为空,然后是ROWID   使用1。如果最大的ROWID是   等于最大可能的整数   (9223372036854775807)然后   数据库引擎开始挑选   积极的候选人ROWIDs随机   直到它找到一个不是   以前用过。如果没有未使用的ROWID   可以在合理的数字后找到   尝试,插入操作   因SQLITE_FULL错误而失败。

简而言之,插入4行后,删除第二行,然后再插入另一行,ids将是:

1 3 4 5

答案 1 :(得分:1)

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