1. 程式人生 > >MySQL中生成唯一值性質的工具UUID()和自增序列

MySQL中生成唯一值性質的工具UUID()和自增序列

同:都可以生成唯一值;

異: UUID()是可以生成時間、空間上都獨一無二的值;自增序列只能生成基於表內的唯一值,且需要搭配使其為唯一的主鍵或唯一索引;

        實現方式不一樣,UUID()是隨機+規則組合而成的,而自增序列是控制一個值逐步增長的;

        UUID()產生的是字串型別值,固定長度為:36個字元,而自增序列產生的是整數型別值,長度由欄位定義屬性決定;

UUID()生成時間、空間上唯一的值表現在附件的圖片;同一查詢語句[select uuid(),uuid(),length(uuid()),char_length(uuid())]中的兩個uuid()得到的值都是不同的;

從上面的執行結果部分的資訊看

l  同一個SQL語句中,多處呼叫UUID()函式得到的值不相同;

l  得到的隨機值由5個部分組成,且分隔符位為:中劃線;

l  多次呼叫或執行得到的後2組值相同,若把mysqld伺服器關閉,重新啟動之後,會發現第四組的組與未重啟前的值發生變化,然後一直不變化,只要重新啟動mysqld服務就會發生變化。另外,對於同一臺機器,第五組值始終不會發生變化;

l  字元個數為:36,佔位元組數為:36(注:系統預設字符集編碼:utf8);

針對UUID產生的值組成部分,作如下解說:

l  前三組值是時間戳換算過來的;

l  第四組值是暫時性保持時間戳的唯一性。例如,使用夏令時;

l  第五組值是一個IEE 802的節點標識值,它是空間上唯一的。若後者不可用,則用一個隨機數字替換。假如主機沒有網絡卡,或者我們不知道如何在某系統下獲得機器地址,則空間唯一性就不能得到保證,即使這楊,出現重複值的機率還是非常小的。

後續加註: