SQL服務器(在V6.0/6.5,可能後來者)。可以想象,Access使用相同的機制。
IDENTITY通過在數據庫中存儲光盤上的下一個數字(或最後一個,誰在乎)進行工作。爲了加速訪問,它被緩存在內存中,並且只是偶爾寫回到光盤(畢竟它是SQL 服務器)。根據SQL Server的關閉方式,可能會錯過磁盤更新。當服務器重新啓動時,有一些方法可以檢測到光盤版本已過時,並且會增加一些數字。
Oracle對SEQUENCE's也是這樣做的。對於同一數據庫中有多臺服務器的多機羣集安裝,這會變得很複雜。爲了支持這一點,服務器第一次得到一個序列號時,它獲得了很多序列號(Cache變量是SEQUENCE定義的一部分,默認爲20 IIRC),並更新了SEQUENCE,假設它將使用所有分配的數字。如果它沒有使用所有分配的數字,那麼所用數字就會有差距。 (這也意味着使用集羣中的SEQUENCE,SEQUENCE數字不一定會被順序使用:機器A寫入21,B寫入41,寫入22等)我從來沒有檢查過,但我認爲SQL Server在故障轉移羣集中可能有相同的差距。
將相同的機制應用於訪問數據庫沒有中央服務器的地方,每個客戶端計算機上只有潛在的大量本地服務器。你可以看到存在差距的可能性。
你確定你沒有刪除缺少ID的記錄嗎? – MatSnow
我沒有刪除記錄,我發佈的屏幕截圖實際上是我創建它以來在桌面上做的第三項。 – dreamheart
好的。但是,主鍵不會自動「自動遞增」。也可以設置例如日期列作爲主鍵。 – MatSnow