SQLite数据库...如果我从表中删除一行,主键的值会受到影响吗?

3
假设我最初建立了一个有10行的表格。那么在最后一行的id(主键列)的值是9还是10?现在假设我删除第5行和第8行(假设从1开始计数),并添加另一行,这样我总共有9行。现在每一行中id的值会发生什么变化?
      db.delete(DBAdapter.TableName, "Id=? AND QstnrId=? AND QstnId=?",
      new String[] { Id.toString(), QuestionnaireId, QuestionId });

3
试一试有什么不对吗? - undefined
如果你在问的是,ID不会被重新分配...行ID 10仍然是10。 - undefined
3个回答

5

早期行的id值将保持不变...

对于新行,它将从10/11开始...

因此,id列表将为:1 2 3 4 6 7 9 10 11 12,...就像其他SQL数据库一样


4
在SQLite中,自增主键列使用的值比表中已使用过的最大值大1:

根据文档

如果一个列拥有INTEGER PRIMARY KEY AUTOINCREMENT类型,则使用略微不同的ROWID选择算法。为新行选择的ROWID至少比该表中曾经存在的最大ROWID大1。如果该表以前从未包含任何数据,那么将使用ROWID为1。如果表以前拥有具有最大可能ROWID的行,则不允许进行新的INSERT,任何尝试插入新行的操作都将失败,并显示SQLITE_FULL错误。

因此,删除一行对生成的下一个ID没有影响。

请注意:对于非主键,它仅使用当前最大ID的值。

另外,删除一行不会更改另一行的值,因此如果您拥有ID为1、2、3、4的行,并删除具有ID 1的行,则其余行仍将具有ID 2、3、4。自动递增只是一种使插入更容易的方法。


非常感谢...特别是对于文档的支持... :) - undefined

1

旧的ID值不会受到影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接