詳解Mysql主鍵

2021-10-24 09:47:37 字數 827 閱讀 8279

主鍵

對於關係表,有個很重要的約束,就是任意兩條記錄不能重複。不能重複不是指兩條記錄不完全相同,而是指能夠通過某個字段唯一區分出不同的記錄,這個欄位被稱為主鍵

對主鍵的要求,最關鍵的一點是:記錄一旦插入到表中,主鍵最好不要再修改,因為主鍵是用來唯一定位記錄的,修改了主鍵,會造成一系列的影響。

由於主鍵的作用十分重要,如何選取主鍵會對業務開發產生重要影響。如果我們以學生的身份證號作為主鍵,似乎能唯一定位記錄。然而,身份證號也是一種業務場景,如果身份證號公升位了,或者需要變更,作為主鍵,不得不修改的時候,就會對業務產生嚴重影響。

因此,身份證號、手機號、郵箱位址這些看上去可以唯一的字段,均不可用作主鍵。

作為主鍵最好是完全業務無關的字段,我們一般把這個字段命名為id。常見的可作為id欄位的型別有:

自增整數型別:資料庫會在插入資料時自動為每一條記錄分配乙個自增整數,這樣我們就完全不用擔心主鍵重複,也不用自己預先生成主鍵;

全域性唯一guid型別:使用一種全域性唯一的字串作為主鍵,類似8f55d96b-8acc-4636-8cb8-76bf8abc2f57。guid演算法通過網絡卡mac位址、時間戳和隨機數保證任意計算機在任意時間生成的字串都是不同的,大部分程式語言都內建了guid演算法,可以自己預算出主鍵。

對於大部分應用來說,通常自增型別的主鍵就能滿足需求。我們在students表中定義的主鍵也是bigint not null auto_increment型別。

主鍵是關係表中記錄的唯一標識。主鍵的選取非常重要:主鍵不要帶有業務含義,而應該使用bigint自增或者guid型別。主鍵也不應該允許null。

可以使用多個列作為聯合主鍵,但聯合主鍵並不常用。

刪除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...

自動編號主鍵與GUID主鍵詳解

這種方法也是很多朋友在使用的,就是新建乙個id欄位,自動增長,非常方便也滿足主鍵的原則,優點是 資料庫自動編號,速度快,而且是增量增長,聚集型主鍵按順序存放,對於檢索非常有利 數字型的,占用空間小,易排序,在程式中傳遞也方便 如果通過非系統增加記錄 比如手動錄入,或是用其他工具直接在表裡插入新記錄,...