2012-02-27 66 views
2

假设我最初建立一个包含10行的表。所以在最后的id(主键列)的值将是9或10?现在假设我删除了行号。 5和8(假设行从1开始计数)并添加另一行,现在我总共有9行。现在每行中id的值会发生什么变化?SQLite数据库..是主键的价值,如果我从表中删除一行

 db.delete(DBAdapter.TableName, "Id=? AND QstnrId=? AND QstnId=?", 
     new String[] { Id.toString(), QuestionnaireId, QuestionId }); 
+3

尝试它有什么问题? – pcalcao 2012-02-27 18:15:14

+0

这些ID将不会被重新分配,如果这就是你的要求...行ID 10仍然是10. – Rudu 2012-02-27 18:16:33

回答

3

一种自动增量的主键 SQLite中列使用一个值1比曾经被在表中使用的最大值的情况下:

the documentation

如果列具有INTEGER PRIMARY KEY AUTOINCREMENT类型,则使用稍微不同的ROWID选择算法。 为新行选择的ROWID至少比在同一个表中存在的最大ROWID大一个。如果表格以前从未包含任何数据,则使用1的ROWID。如果该表先前已经保留了一个具有最大可能ROWID的行,那么不允许新的INSERT,并且任何插入新行的尝试都将失败,并出现SQLITE_FULL错误。

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

注意:对于非主键,它只使用当前最大ID的值。另外,删除一行不会更改另一行的值,因此如果您的ID为1,2,3,4并删除ID为1的行,其余行仍将具有ID 2,3,4自动增量只是简化插入的一种方法。

+0

thanx很多...特别是文件... :) – 2012-02-27 19:18:41

1

旧的ID值不会受到影响。

5

ID为早先的行会保持相同的价值观......

对于新的,它会开始形式10/11 ...

所以ID列表是:1 2 3 4 6 7 9 10 11 12,.... as in every other SQL Database

+0

thanx很多.. :) .. – 2012-02-27 19:17:22