在sqlite数据库中用尽唯一ID

Vic*_*kov 2 database sqlite unique auto-increment

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

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

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

谢谢.

Mat*_*hen 7

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

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


Bit*_*ved 7

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

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

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

  • 它实际上是2.92277266×10 ^ 10年([100 ms*9223372036854775807年](https://www.google.com/search?q=100%20ms%20*%209223372036857575807%20in%20years)) (6认同)