2012-09-20 23 views
0

嗨,我正在創建一個事件管理站點。來自世界各地的用戶(每個用戶都有唯一的登錄ID)可以添加事件。這些事件存儲在一個臨時表中,並在管理員批准時傳輸到事件表中。主鍵和自動增量在mysql中的意外行爲的選擇

我需要爲event_id選擇一個非常高效的密鑰。代孕鑰匙將是最好的選擇。目前我正在使用自動增量。

1)自動增量是否考慮表中最後一個最大的主鍵或添加的最後一個鍵。

問題)事件I​​D 41,42,43出現在臨時表中。管理員批准event_id 43並離開臨時表。臨時表中最大的密鑰現在是42.

添加的下一個事件再次在臨時表中分配ID 43。這是爲什麼發生?

我想使用別的東西作爲主鍵。我該怎麼辦 ??是時間戳+ userid一個很好的選擇。這將導致一個非常長的主鍵雖然

回答

1

自動增量值來自計數​​器,所以通常你不會得到一個值兩次。而且,每張桌子都有自己的櫃檯。

儘管InnoDB存儲引擎有一個問題:計數器重置爲服務器啓動時列的最大值,所以如果MySQL在刪除和插入之間重新啓動,您可能會再次得到43。如果您使用MyISAM存儲引擎,則不會發生這種情況,因爲計數器存儲在磁盤上。

對於可擴展性,有些人建議使用UUID,因爲它們使您能夠在幾臺服務器之間分配數據庫,而不用擔心在某處意外重複使用主鍵。然而,UUID鍵需要更多的CPU和存儲空間。

+0

謝謝。所以,我應該使用什麼建議? – Abhishek

+0

只需使用自動增量,您有多大可能需要多個服務器來處理事件數據庫? – Joni

+0

我們將只使用一臺服務器。 – Abhishek