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

时间:2012-02-27 18:13:49

标签: java android sql database sqlite

假设我最初构建一个包含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 个答案:

答案 0 :(得分:5)

前面行的id值将保持不变...

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

所以id列​​表如下:1 2 3 4 6 7 9 10 11 12,.... as in every other SQL Database

答案 1 :(得分:3)

SQLite中的自动增量主键列使用的值大于表中使用过的最大值:

来自the documentation

  

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

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

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

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

答案 2 :(得分:1)

旧的ID值不会受到影响。