主鍵和索引的區別

2022-06-29 20:27:11 字數 1159 閱讀 1439

主鍵(primary key)

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

乙個表只能有乙個pk約束,並且pk約束中的列不能接受空值。由於pk約束可以保證資料的唯一性,因此經常對標識列定義這種約束。

如果為表指定了pk約束,資料庫引擎將通過為主鍵列建立唯一索引來強制資料的唯一性。當在查詢中使用主鍵時,此索引還可以用來對資料進行快速訪問。因此,所選的主鍵必須遵守建立唯一索引的規則。

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

聚集索引

聚集索引給予資料行的兼職在表內排序和儲存這些資料行。每個表只能有乙個聚集索引,因為資料行本身只能按乙個順序儲存。

每個表幾乎都對列定義聚集索引來實現下列功能:

可用於經常使用的查詢。

提供高度唯一性。

兩者的比較

主鍵聚集索引

用途強制表的實體完整性

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

乙個表多少個

乙個表最多乙個主鍵

乙個表最多乙個聚集索引

是否允許多個欄位來定義

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

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

是否允許null值

如果要建立的資料列中資料存在null,無法建立主鍵,建立表時指定的pk約束列隱式轉換為not null

沒有限制建立聚集索引的列一定必須not null。也就是說可以獵德資料時null參看最後一項比較

是否要求資料必須唯一

要求資料必須唯一

資料既可以唯一,也可以不唯一。看你定義這個索引的unique設定。(這一點需要看後面的乙個比較,雖然你的資料列可能不唯一,但是系統會替你產生乙個你看不到的唯一列。)

建立的邏輯

資料庫在建立主鍵同時,會自動建立乙個唯一索引。如果這個表之前沒有聚集索引,同時建立主鍵時候沒有強制指定使用非聚集索引,則同時建立乙個唯一的狙擊索引

如果未使用unique屬性建立聚集索引,資料庫引擎將向表自動新增乙個死自己uniqueifier列。必要時,資料庫引擎將向行自動新增乙個uniqueifier值,使每個鍵唯一。此列和列值供內部使用,使用者不能檢視或訪問。

主鍵和索引的區別

主鍵 primary key 來自msdn的描述 表通常具有包含唯一標識表中每一行的值的一列或一組列。這樣的一列或多列稱為表的主鍵 pk 用於強制表的實體完整性。在建立或修改表時,您可以通過定義 primary key 約束來建立主鍵。乙個表只能有乙個 primary key 約束,並且 prima...

主鍵和索引的區別

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

主鍵和索引的區別

區別 主鍵是一種約束,唯一索引是一種索引,兩者在本質上是不同的。1 主鍵建立後一定包含乙個唯一性索引,唯一性索引並不一定就是主鍵。2 唯一性索引列允許空值,而主鍵列不允許為空值。3 主鍵列在建立時,已經預設為空值 唯一索引了。4 主鍵可以被其他表引用為外來鍵,而唯一索引不能。5 乙個表最多只能建立乙...