程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL內置函數uuid和uuid_short簡析

MySQL內置函數uuid和uuid_short簡析

編輯:MySQL綜合教程


有同學問到MySQL的uuid這個函數。簡要介紹一下。 用法

            簡單看到,這個值,每次執行都是不同的。   生成規則 第1 2 3 段是與時間有關的。   www.2cto.com  
  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。有一些不足:  www.2cto.com   1、初始值太大,無法重設 2、存在一個問題是每次重啟後第一次執行的值不是重啟前的那個值+1 3、而且如果重啟在1s內完成,可能出現不單調遞增(雖然這個可能性微乎其微)。            要滿足上面的需求,可以考慮用udf實現。       作者 丁林.tb

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved