主鍵與聚集索引

2021-09-30 11:39:23 字數 1604 閱讀 3096

參考文章:

主鍵與聚集索引

表通常具有包含唯一標識表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 (pk),用於強制表的實體完整性。在建立或修改表時,您可以通過定義 primary key 約束來建立主鍵。

主鍵(primary key )

來自msdn的描述: 

表通常具有包含唯一標識表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 (pk),用於強制表的實體完整性。在建立或修改表時,您可以通過定義 primary key 約束來建立主鍵。

乙個表只能有乙個 primary key 約束,並且 primary key 約束中的列不能接受空值。由於 primary key 約束可保證資料的唯一性,因此經常對標識列定義這種約束。  如果為表指定了 primary key 約束,則 sql server 2005 資料庫引擎 將通過為主鍵列建立唯一索引來強制資料的唯一性。當在查詢中使用主鍵時,此索引還可用來對資料進行快速訪問。因此,所選的主鍵必須遵守建立唯一索引的規則。 

建立主鍵時,資料庫引擎會自動建立唯一的索引來強制實施 primary key 約束的唯一性要求。如果表中不存在聚集索引或未顯式指定非聚集索引,則將建立唯一的聚集索引以強制實施primary key約束

聚集索引

聚集索引基於資料行的鍵值在表內排序和儲存這些資料行。每個表只能有乙個聚集索引,因為資料行本身只能按乙個順序儲存。 每個表幾乎都對列定義聚集索引來實現下列功能:

可用於經常使用的查詢。

提供高度唯一性。

兩者的比較

下面是乙個簡單的比較表 

比較主鍵聚集索引

用途強制表的實體完整性

對資料行的排序,方便查詢用

乙個表多少個

乙個表最多乙個主鍵

乙個表最多乙個聚集索引

是否允許多個欄位來定義

乙個主鍵可以多個欄位來定義

乙個索引可以多個欄位來定義

是否允許 null 資料行出現

如果要建立的資料列中資料存在null,無法建立主鍵。

建立表時指定的 primary key 約束列隱式轉換為 not null。

沒有限制建立聚集索引的列一定必 須not   null .

也就是可以列的資料是 null

參看最後一項比較

是否要求資料必須唯一

要求資料必須唯一

資料即可以唯一,也可以不唯一。看你定義這個索引的 unique 設定。

(這一點需要看後面的乙個比較,雖然你的資料列可能不唯一,但是系統會替你產生乙個你看不到的唯一列)

建立的邏輯

資料庫在建立主鍵同時,會自動建立乙個唯一索引。

如果這個表之前沒有聚集索引,同時建立主鍵時候沒有強制指定使用非聚集索引,則建立主鍵時候,同時建立乙個唯一的聚集索引

如果未使用 unique 屬性建立聚集索引,資料庫引擎 將向表自動新增乙個四位元組 uniqueifier 列。

必要時,資料庫引擎 將向行自動新增乙個 uniqueifier 值,使每個鍵唯一。此列和列值供內部使用,使用者不能檢視或訪問。

主鍵與聚集索引的區別

主鍵可為聚集索引也可為非聚集索引。兩者的比較 下面是乙個簡單的比較表 主鍵 聚集索引 用途強制表的實體完整性 對資料行的排序,方便查詢用 乙個表多少個 乙個表最多乙個主鍵 乙個表最多乙個聚集索引 是否允許多個欄位來定義 乙個主鍵可以多個欄位來定義 乙個索引可以多個欄位來定義 是否允許 null 資料...

mysql主鍵是聚集索引麼 主鍵就是聚集索引嗎?

前言 最近在一次面試中,討論了乙個這樣的問題 主鍵和索引有什麼區別?當時我的回答是這樣的 主鍵就是加了唯一性約束的聚集索引。你確定你所說的是對的?面試官反問到。應該是對的。我不加思索地回答道。你回去後研究一下這個問題吧。難道我真的錯了?第一次嘗試 當問題出現時,請用事實支援你的觀點。首先,必須了解一...

SQL中主鍵,聚集索引,非聚集索引的區別

主鍵 主鍵是表中通常有唯一標誌著表中的每一行的值的一列或者多列,它的值用於唯一地標識表中的某一條記錄,用於強制表的實體完整性。主鍵用來乙個表引用來自其他表的特定記錄,主鍵是一種唯一關鍵字,表定義的一部分。可以理解為乙個記錄行的標識。我們通過這個標識,就能精確把這行記錄找出來,它在表中是唯一的 聚集索...