SQLite 3的INTEGER PRIMARY KEY是ROWID的别名。在插入数据时,这种类型的列的取值会[参考]:
- 选取当前表内比已记录了的
ROWID大的最小的整数; - 如果
ROWID已经到达了最大的可用整数(9223372036854775807),那么随机选择一个正整数:- 若该被选取的正整数没有在当前表的
ROWID中使用,则返回该正整数;否则继续随机选择; - 若在一定次数的尝试之后,没有找到可用的正整数,则该插入失败,返回
SQLITE_FULL。
- 若该被选取的正整数没有在当前表的
可以通过在创建表示对列添加AUTOINCREMENT的属性来改变选取算法。
也就是说,在仅使用INTEGER PRIMARY KEY声明的列中,存在新旧行数据(旧行数据被删除)用同一ROWID的可能。