1

我想知道SQLite在删除之前的一些行之后如何处理添加新行。例如,我有 3 条记录/行和它们的 3 个自动增量 ID:

ID 1 
ID 2
ID 3

我删除了 ID 为 2 的记录,所以现在我有:

ID 1
ID 3

现在我添加一个新记录/行。

该数据库是添加ID 4还是添加ID 2(当其自动递增时)?我想它只是从最后一条记录中添加了+1,但我不确定。但如果确实如此,这对数据库大小有何影响?如果我经常删除/添加新记录,ID 会在你不知不觉中达到一百万?那会有什么问题吗?是否有自动增量来填充跳过的 ID 号(已删除)?

4

2 回答 2

0

因为 SQL 不关心要删除的当前行,所以它在创建新行时总是使用最后一个已知的递增值。

前任:

20 21

10000 10001

这就是标准 SQL 与自动增量一起工作的方式。

于 2013-02-20T20:55:10.450 回答
0

您的许多问题都在SQLite 的AUTOINCREMENT页面上得到了间接回答,但我将提供一个精简版。

该数据库是添加 ID 4 还是添加 ID 2(当其自动递增时)?

它将使用 4。

但如果确实如此,这对数据库大小有何影响?

主键索引的大小增长,但每一行中的数据会比数字索引更快地增加数据库的大小。所以这不是应用程序的问题。

如果我经常删除/添加新记录,ID 会在你不知不觉中达到一百万?那会有什么问题吗?

SQLite 可以容纳的最大 id 是 9223372036854775807,略多于一百万。假设您(以某种方式)每毫秒增加此 id 并且您的应用程序连续运行,您将在不到 300,000 年的时间内达到此限制。
不要失去希望!在此 SQLite 将随机选择一个未使用的 id 后,只有在检查了“合理数量”的 id 之后,SQLite 才会放弃并抛出一个错误,声称它已满。

是否有自动增量来填充跳过的 ID 号(已删除)?

我相信您可以编写一个查询来执行此操作,但是找到这些空索引只会减慢您的应用程序的速度。所以考虑到上面的数学:我不会出汗。:)

于 2013-02-20T21:25:46.707 回答