簡體   English   中英

Android SQLite ID

[英]Android SQLite ID

我想知道SQLite在刪除之前的行之后如何處理添加新行。 例如,我有3條記錄/行及其3個自動增量ID:

ID 1 
ID 2
ID 3

我刪除了ID為2的記錄,所以現在有:

ID 1
ID 3

現在,我添加一個新記錄/行。

該數據庫是添加ID 4還是添加ID 2 (當其自動遞增時)? 我想它只是從最后一個記錄中添加+1,但我不確定。 但是,如果這樣做的話,這如何影響數據庫的大小? 如果我經常刪除/添加新記錄,那么在知道之前ID是一百萬嗎? 那會是什么問題? 無論如何,是否有自動增量來填充跳過的ID號(已刪除的ID號)?

由於SQL不在乎要刪除的當前行,因此在創建新行時它將始終使用最后一個已知的遞增值。

例如:

20 21

10000 10001

這就是標准SQL與自動增量一起工作的方式。

SQLite的AUTOINCREMENT頁面上間接回答了您的許多問題,但是我將提供一個精簡版本。

該數據庫是添加ID 4還是添加ID 2(當其自動遞增時)?

它將使用4。

但是,如果這樣做的話,這如何影響數據庫的大小?

主鍵索引的大小增加,但是每一行中的數據將比數字索引快得多地增加數據庫的大小。 因此,對於應用程序而言,這不是一個問題。

如果我經常刪除/添加新記錄,那么在知道之前ID是一百萬嗎? 那會是什么問題?

SQLite可以容納的最大ID是9223372036854775807,略大於一百萬。 假設您(以某種方式)每毫秒增加一次此id,並且您的應用程序連續運行,那么您將在不到30萬年的時間內達到此限制。
不要失去希望! 此SQLite將在隨機搜索未使用的ID時選擇ID,只有在檢查ID的“合理數量”之后,SQLite才會放棄並拋出錯誤以聲明ID已滿。

無論如何,是否有自動增量來填充跳過的ID號(已刪除的ID號)?

我敢肯定,您可以編寫查詢來執行此操作,但是找到這些空置索引只會減慢您的應用程序運行速度。 因此,請考慮以上數學:我不會汗流sweat背。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM