主鍵的唯一性和聯合主鍵概念辨析

2021-10-08 16:52:04 字數 943 閱讀 7469

最近學習一點資料庫的基本知識,被乙個問題困惑了許久:主鍵是唯一的索引,那麼為何乙個表可以建立多個主鍵呢? 

其實「主鍵是唯一的索引」這話有點歧義的。舉個例子,我們在表中建立了乙個id欄位,自動增長,並設為主鍵,這個是沒有問題的,因為「主鍵是唯一的索引」,id自動增長保證了唯一性,所以可以。 

此時,我們再建立乙個欄位name,型別為varchar,也設定為主鍵,你會發現,在表的多行中你是可以填寫相同的name值的,這豈不是有違「主鍵是唯一的索引」這句話麼? 

所以我才說「主鍵是唯一的索引」是有歧義的。應該是「當表中只有乙個主鍵時,它是唯一的索引;當表中有多個主鍵時,稱為聯合主鍵,聯合主鍵聯合保證唯一索引」。 

為什麼自增長id已經可以作為唯一標識的主鍵,為啥還需要聯合主鍵呢。因為,並不是所有的表都要有id這個欄位啊哈哈,比如,我們建乙個學生表,沒有唯一能標識學生的id,怎麼辦呢,學生的名字、年齡、班級都可能重複,無法使用單個欄位來唯一標識,這時,我們可以將多個字段設定為主鍵,形成復合主鍵,這多個字段聯合標識唯一性,其中,某幾個主鍵字段值出現重複是沒有問題的,只要不是有多條記錄的所有主鍵值完全一樣,就不算重複。

聯合主鍵一般用於在乙個字段可能有重複的情況下,用另乙個欄位去保持其唯一性

比如有兩個字段:name , phone 

name 欄位是可能重複的,而 phone 是唯一的 

這時在建立資料表的時候可以在末尾加上: 

primary key(name, phone)
表示用 name 與 phone 構成聯合主鍵,復合主鍵以保持記錄的唯一性

1、資料庫的每張表只能有乙個主鍵,不可能有多個主鍵。 

2、所謂的一張表多個主鍵,我們稱之為聯合主鍵。 

注:聯合主鍵:就是用多個字段一起作為一張表的主鍵。

3、主鍵的主鍵的作用是保證資料的唯一性和完整性,同時通過主鍵檢索表能夠增加檢索速度。

主鍵與唯一性索引

其實指定列的索引就相當於對指定的列進行排序,為什麼要排序呢?因為排序有利於對該列的查詢,可以大大增加查詢效率。那麼可能有人認為應該對所有的列排序,這樣就可以增加整個資料庫的查詢效率?這樣的想法是錯誤的,原因是建立索引也是要消耗系統資源的,給每個表裡的每個列都建立索引那麼將對系統造成極大的負擔,那就更...

主鍵與唯一性索引

其實指定列的索引就相當於對指定的列進行排序,為什麼要排序呢?因為排序有利於對該列的查詢,可以大大增加查詢效率。那麼可能有人認為應該對所有的列排序,這樣就可以增加整個資料庫的查詢效率?這樣的想法是錯誤的,原因是建立索引也是要消耗系統資源的,給每個表裡的每個列都建立索引那麼將對系統造成極大的負擔,那就更...

主鍵和唯一性索引的區別

主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵。所謂主鍵就是能夠唯一標識表中某一行的屬性或屬性組,乙個表只能有乙個主鍵,但可以有多個候選索引。因為主鍵可以唯一標識某一行記錄,所以可以確保執行資料更新 刪除的時候不會出現張冠李戴的錯誤。主鍵除了上述作用外,常常與外來鍵構成參照完整性約束,防止出現資料...