(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)序列生成器的架構,類似自增序列,不過需要借助額外的開發工作量,以及提供乙個第三方的服務,可以規避自增序列的字增全域性鎖的問題,提高併發,對資料水平拆分可以更好地支援;
mysql新增主鍵 MySQL新增主鍵的三種方法
完整性約束 約束條件 說明完整性型別 primary key 主鍵,一行資料的唯一標識,非空 實體 行 完整性 foreign key 外來鍵,關聯另外一張表的主鍵 引用完整性 not null 非空約束,欄位不允許為空 域完整性 unique 唯一約束,設定欄位的值是唯一的允許為空,但只能有乙個空...
刪除mysql主鍵語句 MySQL主鍵新增 刪除
2改動資料庫和表的字符集 alter database maildb default character set utf8 改動資料庫的字符集 alter table mailtable default character set utf8 改動表的字符集 假設您想要把錶預設的字符集和全部字元列 c...
MySQL聯合主鍵儲存 mysql聯合主鍵
聯合主鍵就是多個表的主鍵聯合起來作為乙個表的主鍵 這個是摘抄的別人的 create table products description products id int 11 not null,language id int 11 not null default 1 products name v...