首頁 > 資料庫 > mysql教程 > mysql中的主鍵分為哪幾種

mysql中的主鍵分為哪幾種

anonymity
發布: 2020-09-19 09:11:25
原創
6087 人瀏覽過

mysql中的主鍵分為:1、自增序列;2、UUID函數產生的隨機值;3、用戶註冊的唯一性帳號名稱;4、基於一套機制產生類似自增的值,如序列產生器。

mysql中的主鍵分為哪幾種

(針對InnoDB引擎)我們實際生產環境可能會使用四類屬性作為主鍵:

(1). 自增序列;

(2). UUID()函數產生的隨機值;

(3). 使用者註冊的唯一性帳號名稱,字串類型,一般長度為:40個字元;

(4). 基於一套機制產生類似自增的值,例如序列產生器;

那麼我們接下來,再分析下這四類屬性各自作為表主鍵的優缺點:

(1)自增序列:從小到大或從大到小的順序模式增加新值;資料型別也利於進行主鍵值比較;儲存空間佔用也相對最小,一般設定為:4個位元組的INT型別或8個位元組的BIGINT型別;若是想進行資料水平分割的話,也可以藉助設定mysqld實例的2個參數:auto_increment_increment 和auto_increment_offset;另外,唯一缺點就是自增序列是一個表格層級的全域鎖,在5.0系列大規模並發寫的時候,因鎖釋放機制的問題容易出現瓶頸,但是5.1系列做了改進,基本上不存在此問題;

(2)UUID()函數:值為隨機性固定部分,其值產生是無序的,且同一台伺服器上產生的值相同部分為77.8%;產生的值字元個數為36,按utf8編碼計算,佔用的存儲空間為36個字節;對於數據水平拆分支持,無需特殊設置;

(3)使用用戶註冊的帳號名稱,字符字串類型,其值的產生依賴使用者輸入,為此資料基本上為無序增加,字串的長度也是不定的,只能透過前段技術控制最短最大長度值的限制,對水平拆分支持,無需做特殊設定;

(4)序列產生器的架構,類似自增序列,不過需要藉助額外的開發工作量,以及提供一個第三方的服務,可以規避自增序列的字增全域鎖的問題,提高並發,對資料水平拆分可以更好地支援;

(5)雙主複製架構的機率性碰到的場景:主伺服器的資料執行成功,而沒有複製到線上備用伺服器時,出問題的機率確實存在,其他類型的做法,也必須人工干涉解決,都無簡單且合理的自動化辦法,以上四種辦法都無法規避;

透過四種屬性值作為主鍵的優缺點分析,以及對比前面我們闡述的主鍵所需的優秀素質,若是不考慮水平拆分的問題,帶來額外設定上的麻煩,則自增序列是最佳的主鍵欄位選擇;使用者的註冊帳號本身要求唯一性且非空的場景下,則可以作為主鍵欄位的選擇;若是考慮水平分割的問題,則採用自增序列產生器的架構,非常易用且可靠的實作方式,產生的值是最佳主鍵欄位的選擇;

以上是mysql中的主鍵分為哪幾種的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板