2017-08-16 69 views
0

我最近開始使用訪問,到目前爲止,有些東西導致我沒有問題,但是我擔心在數據庫繼續擴展時可能會帶來一些問題。 當我創建表時,Microsoft Access建議使用它們的默認主鍵,我通常會這樣做,問題是由於某種原因,當填充表時主鍵「ID」不一致,它將從4到2679 (只是隨機的例子),它會跳過很多數字,如果我正確的話,這個主鍵會自動設置爲自動增量,對嗎?那爲什麼它跳過所有的數字?訪問中的主鍵不是順序

該表使用Visual Studio和C#語言填充一個簡單的SQL查詢。見下面照片從我的訪問表用來做

enter image description here

+1

你確定你沒有刪除缺少ID的記錄嗎? – MatSnow

+0

我沒有刪除記錄,我發佈的屏幕截圖實際上是我創建它以來在桌面上做的第三項。 – dreamheart

+0

好的。但是,主鍵不會自動「自動遞增」。也可以設置例如日期列作爲主鍵。 – MatSnow

回答

0

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在故障轉移羣集中可能有相同的差距。

將相同的機制應用於訪問數據庫沒有中央服務器的地方,每個客戶端計算機上只有潛在的大量本地服務器。你可以看到存在差距的可能性。

+0

感謝您的回答,我現在明白了很多。我決定採取不同的方法,我將開始使用日期和時間作爲主鍵,因爲我有它的格式來顯示秒和數據條目需要超過幾秒才能保存,所以它將是一個唯一的主鍵。 – dreamheart