MySQL UUID函數的詳解

MySQL UUID函數的詳解 mysql

MySQL中能夠有二類用於生成惟一值性質的工具:UUID()函數和自增序列,那麼兩者有何區別呢?咱們就此對比下各自的特性及異同點:sql

l  均可以實現生成惟一值的功能;服務器

l  UUID是能夠生成時間、空間上都獨一無二的值;自增序列只能生成基於表內的惟函數

一值,且須要搭配使其爲惟一的主鍵或惟一索引;工具

l  實現方式不同,UUID是隨機+規則組合而成的,而自增序列是控制一個值逐步增加的;ui

l  UUID產生的是字符串類型值,固定長度爲:36個字符,而自增序列產生的是整數類型值,長度由字段定義屬性決定;編碼

接下來,詳細講解下UUID()函數產生的值:.net

oot@localhost : (none) 06:09:40> SELECT UUID(),UUID(),LENGTH(UUID()),CHAR_LENGTH(UUID())\G索引

*************************** 1. row ***************************字符串

UUID(): de7ee638-4322-11e0-85ab-842b2b4a7e75

UUID(): de7ee642-4322-11e0-85ab-842b2b4a7e75

LENGTH(UUID()): 36

CHAR_LENGTH(UUID()): 36

1 row in set (0.00 sec)

 

從上面的執行結果部分的信息看

l  同一個SQL語句中,多處調用UUID()函數獲得的值不相同;

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

l  屢次調用或執行獲得的後2組值相同,若把mysqld服務器關閉,從新啓動以後,會發現第四組的組與未重啓前的值發生變化,而後一直不變化,只要從新啓動mysqld服務就會發生變化。另外,對於同一臺機器,第五組值始終不會發生變化;

l  字符個數爲:36,佔字節數爲:36(注:系統默認字符集編碼:utf8);

 

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

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

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

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

 

********************************************************************

後續添加的:

在mysql中,可使用uuid 來生成主鍵,可是用mysql的uuid()函數 ,生成的uuid是36位的,其中包含32個字符以及4個分隔符(-),每每這個分隔符對咱們來講是沒有用的,可使用mysql自帶的replace函數去掉分隔符

replace(uuid(),'-','')   ---->將uuid()中的‘-’,去掉,即替換成空串;

此外 upper(replace(uuid(),'-',''))用於將字符轉換爲大寫

相關文章
相關標籤/搜索