2012-03-13 65 views
2

當由MySQL生成的UUID()不唯一時會發生什麼?如果這是針對主鍵的列,那麼MySQL會出錯,還是會嘗試生成另一個UUID,直到找到真正唯一的一個UUID?MySQL UUID()何時不唯一?

回答

5

那麼,如果你打電話UUID()兩次,並得到相同的結果,最有問題的東西會是「東西壞了」(tm)。據我所知,它應該是獨一無二的,應該是永遠的。

將不會有「再生」代碼可用:該功能旨在甚至跨計算機創建唯一的密鑰,所以它如何才能知道其結果不是唯一的?

http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

甲UUID被設計爲一個數字,是在空間和時間 全局唯一。對UUID()的兩個調用預計會生成兩個不同的 值,即使這些調用是在兩個不相互連接的單獨計算機 上執行的。

也許你的意思是別的?例如,如果您使用UUID()來生成應該是唯一的東西(如主鍵或唯一字段等),並且您以前添加了相同的編號(例如,您只需要調用UUID()一次,但插入了兩次),那麼當將非唯一內容添加到應該是唯一的地方時,您將獲得默認錯誤。你不會得到一個新的。

一些閱讀材料有關的唯一性:

  1. 的手冊。讀它,以及它如何使用各種零件生成uuidhttp://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

  2. 檢查該手冊的實際定義鏈接(但是這是一個相當讀,所以你可能會跳過這一項):https://www2.opengroup.org/ogsys/jsp/publications/PublicationDetails.jsp?catalogno=c706

  3. 一些容易理解的dubplicates的概率在這裏指標:http://en.wikipedia.org/wiki/Universally_unique_identifier

  4. 沒有對MySQL的網站(論壇等),也有的談,如何使用它作爲主鍵,但我在工作和短期的時間,你需要自己搜索:)

+0

嗯,但不是UUID的「大多是獨一無二的低碰撞機率」,而不是保證獨特?我想這就是我不確定的部分 - 有沒有可能UUID()可能不會生成唯一的ID? – ina 2012-03-14 01:10:54

+0

變化是一個棘手的詞彙,但將它們用作主鍵並不是聞所未聞的,如果這就是你所要求的。我會發布一些閱讀材料,但你可以很容易地找到一些。 – Nanne 2012-03-14 08:12:28

+0

你會推薦使用UUID作爲主鍵嗎? – ina 2012-03-14 11:07:38

2

MySQL UUID()確定性地基於MAC地址,版本和時間戳。如果單個服務器上的2個線程使用相同的時間戳(完全相同的微秒)調用,則預期會得到相同的結果。這對單線程是不可能的,因爲這些調用在4Ghz處理器上會分開幾微秒。

+0

我忘了提及:你會得到一個重複的主鍵錯誤。 – dusc2don 2013-06-28 19:33:44