2011-03-04 63 views
4

我想創建一個數據庫文件的對象和子對象。例如,刪除後自動增量主鍵會發生什麼?

第一個表格將用於存儲更改的罐子。每個jar條目都會有一個自動增量的主ID鍵和有關jar的數據,比如高度,直徑等等。

第二個表格將包含硬幣。每個硬幣都有一個ID(需要?),並且還會包含它所包含的jar的ID,它的數據(如數值,年份等)。

我的問題是當刪除一個自動增量鍵時會發生什麼?說你有4瓶:

,你刪號2.請問剩下的罐子被重新編號123?或者會有差距?如果存在間隙,是否填充以便下一個創建的jar將具有2的ID?或者下一個仍然是5?

感謝

回答

7

您可以在sqlite的AUTOINCREMENT文檔閱讀有關:

通常的算法是給 新創建的行中的ROWID比在最大的ROWID較大的一個 表插入之前。如果 表最初是空的,則使用1的ROWID 。如果最大ROWID是 等於最大可能的整數 (9223372036854775807),那麼 數據庫引擎開始於隨機 採摘 陽性候選的ROWID,直到找到了以前沒有使用 之一。如果在嘗試的合理編號 之後沒有找到未使用的ROWID ,則插入操作 將失敗並顯示SQLITE_FULL錯誤。

總之,插入4行,刪除所述第二,然後插入在端另一個之後,這些ID將是:

1 3 4 5

+0

謝謝,這正是我需要知道的!看起來它應該以我想要的方式工作。 – Matt 2011-03-04 20:13:58

+0

是的,它不會讓我六分鐘:) – Matt 2011-03-04 20:25:12

1

這取決於數據庫實現。例如,MySQL在服務器啓動時初始化自動增量計數器,然後將自動增量編號保存在內存中。所以,如果你添加10行到一個空表,然後刪除它們,所有下一個自動增量數將是11不是1.

+0

Android使用sqlite。 – 2011-03-04 20:30:41