MySQL內建函數uuid和uuid_short

來源:互聯網
上載者:User

轉自丁奇,原文:http://dinglin.iteye.com/blog/1487537

有同學問到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實現。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.