2

我知道 sqlite 数据库会为插入的每条记录自动生成一个唯一的 ID(自动增量)。

有谁知道在执行替换查询时是否有可能用完 sqlite3 数据库中的系统唯一 ID?

我的意思是数据库中的每条数据都有自己的类型。例如,系统唯一 ID 类似于 int。如果数据库生成的唯一 ID 等于 MAX_INT,它会如何处理下一条记录?

谢谢。

4

2 回答 2

8

最大可能的 ID 为 9223372036854775807 (2^63 - 1)。在任何情况下,如果找不到新的自增主键,它将返回 SQLITE_FULL。

还有一点很重要。如果您使用 INTEGER PRIMARY KEY,它可以重用之前在表中但已被删除的键。如果你使用 INTEGER PRIMARY KEY AUTOINCREMENT,它永远不能重用一个自动增量键。

于 2012-05-23T20:46:20.117 回答
7

http://www.sqlite.org/autoinc.html

“如果最大的 ROWID 等于最大可能的整数 (9223372036854775807),则数据库引擎开始随机选择正候选 ROWID,直到找到以前未使用的 ROWID。如果在合理的尝试次数后找不到未使用的 ROWID,插入操作失败并出现 SQLITE_FULL 错误。如果没有显式插入负 ROWID 值,则自动生成的 ROWID 值将始终大于零。

鉴于 sqlite id 是 64 位的,您可以在接下来的 546 年中每 100 毫秒插入一条新记录,然后再用完(我编造了这些数字;但您明白了)。

于 2012-05-23T20:47:00.770 回答