我在我的数据库中有一个表,其中一个字段声明为

_id integer primary key
.

没有自动增量。

在这里,我对删除后在插入期间将更新Rowid。我观察到的是

  1. 如果最后一行ID是x并且删除它,则插入下一行获取ID x。

    但如果我用id

    请确认是我的观察权限(只有在最后行删除并且不在行之间缺少时,rowid仅重用。)

    我看到了自动增量的解释。我想知道没有自动增量的行为

有帮助吗?

解决方案

SQLite表不需要自动提升关键字以自动生成主键值.. 您添加到数据库的内容将作为最后一行添加...所以如果您删除了最后一行(x)..新元素将在x位置添加新元素..如果从中间删除或不删除..新元素添加将转到x + 1位置...

在使用自动增量..如果删除x位置的最后一个元素,将通过自动增量算法生成下一个ID x + 1。Makin在x + 1位置添加下一个添加。

其他提示

没有自动增量集,该行将是ROWID ... 的别名

这就是常见问题解答所说的:

如果在插入上指定了ROWID,或者指定的ROWID具有NULL值,则会自动创建适当的ROWID。通常的算法是给出新创建的行一个ROWID,该行比插入件之前表中最大的ROWID大。如果表最初为空,则使用1的ROWID。如果最大的ROWID等于最大可能的整数(9223372036854775807)那么数据库引擎会随意开始挑选正面候选ROWID,直到它找到先前未使用的。如果在合理的尝试次数之后找不到未使用的ROWID,则插入操作会因SQLITE_FULL错误而失败。如果明确插入负线值,则自动生成的RowID值将始终大于零。

上面描述的普通ROWID选择算法将生成单调增加唯一的ROWID,只要您从不使用最大的ROWID值,并且永远不会使用最大的ROWID删除表中的条目。如果您曾删除了行或创建具有最大可能ROWID的行,则在创建新行时,可能重复使用先前已删除的行的ROWID,并且新创建的ROWID可能不处于严格升序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top