MySQL內建函式uuid和uuid short

2021-08-26 19:58:49 字數 1333 閱讀 5408

有同學問到mysql

的uuid

這個函式。簡要介紹一下。

用法

簡單看到,這個值,每次執行都是不同的。

生成規則

第1 2 3

段是與時間有關的。

time_low

、time_mid

、time_high_and_version

轉成16

進製後分別對應第1 2 3

段。這個時間是從1582-10-15 00:00:00.00

到當前時間的100ns

值。(實際上系統只能取到精確us

,再乘以10

)。所以你短時間連續執行的話,比較可能只有第乙個值在改,實際上1 2 3

都可能會改變。

第4段是你啟動這個mysql

後第一次執行select uuid()

時的隨機數,每次重啟會改變。

第5段是mac

值轉過來的,同乙個機器多例項的一般相同。如果mac

值獲取不到,則是乙個隨機值。

所以這個值可以認為是每次執行都不相同。並且不同例項之間也只有極微小概率重複。

uuid_short

與uuid

返回固定長度字串不同,uuid_short

的返回值是乙個unsigned long long

型別。mysql

啟動後第一次執行的值是通過server_id << 56 + server_start_time << 24

來初始化。server_start_time

單位是秒。之後每次執行都加1

。由於每次加1

都會加全域性mutex

鎖,因此多執行緒安全,可以當作sequence

來用,只是初始值有點大。

sequence

mysql

沒有oracle

那樣的sequence

,在不是很精確的情況下,可以考慮上面提到的uuid_short

。有一些不足: 1

、初始值太大,無法重設 2

、存在乙個問題是每次重啟後第一次執行的值不是重啟前的那個值+1 3

、而且如果重啟在1s

內完成,可能出現不單調遞增(雖然這個可能性微乎其微)。

要滿足上面的需求,可以考慮用udf

實現。

MySQL內建函式uuid和uuid short

丁奇,原文 有同學問到mysql的uuid這個函式。簡要介紹一下。用法 簡單看到,這個值,每次執行都是不同的。生成規則 第1 2 3 段是與時間有關的。time low time mid time high and version轉成16進製制後分別對應第1 2 3段。這個時間是從1582 10 1...

MySQL內建函式uuid和uuid short

用法 簡單看到,這個值,每次執行都是不同的。生成規則 第1 2 3 段是與時間有關的。time low time mid time high and version轉成16進製制後分別對應第1 2 3段。這個時間是從1582 10 15 00 00 00.00到當前時間的100ns值。實際上系統只能...

MySQL內建函式uuid和uuid short

mysql的uuid這個函式 簡要介紹一下 用法 簡單看到,這個值,每次執行都是不同的。生成規則 第1 2 3 段是與時間有關的。time low time mid time high and version轉成16進製制後分別對應第1 2 3段。這個時間是從1582 10 15 00 00 00....