我正在尝试使用对象和子对象创建数据库文件。例如,
第一个表是用于存储更改的jar。每个jar条目都有一个自动增量主ID键和关于jar的数据,如高度,直径等等。
第二张表将包含硬币。每个硬币都有一个ID(需要?),还有它所包含的罐子的ID和它的数据(如价值,年份等)。
我的问题是当一个被删除时自动增量键会发生什么?假设你有4个罐子:
1 2 3 4
你删除了2号。剩下的罐子会重新编号为123吗?还是会有差距?如果有间隙,是否填充,以便创建的下一个jar的ID为2?或者下一个仍然是5?
由于
答案 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.