2012-02-27 68 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