在sqlite数据库中用尽唯一ID

时间:2012-05-23 20:43:43

标签: database sqlite unique auto-increment

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

有人知道在执行替换查询时是否有可能在sqlite3数据库中耗尽系统唯一ID?

我的意思是数据库中的每一段数据都有自己的类型。例如,系统唯一ID类似于int。如果数据库生成的唯一ID等于MAX_INT,那么数据库将对下一条记录执行什么操作?

感谢。

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:6)

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

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

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