主鍵 唯一鍵 唯一索引區別

2021-09-02 20:27:05 字數 1333 閱讀 3878

主鍵:

1.可以定義一列或多列為主鍵。不允許空(null),主健可作外健,唯一索引不可;

2.定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。

唯一鍵(唯一性約束):

1.唯一性約束用來限制不受主鍵約束的列上的資料的唯一性,用於作為訪問某行的可選手段,

指定列上都不允許有相同的值,允許空(null)

2.唯一約束可以用於保證在基表中增加一條記錄時,乙個或多個列值是唯一的。

唯一索引:可以定義一列或多列為唯一索引

索引:是為了方便查詢資料快速定位

1.主健、唯一鍵,都會自動建立唯一索引;

2.主健可作外健,唯一索引不可;

3.主健不可為空,唯一索引可;

4.在建立唯一性約束和主鍵約束時可以建立聚集索引和非聚集索引,但在預設情況下主鍵約束產生聚集索引,而唯一性約束產生非聚集索引

5.約束和索引, 前者是用來檢查資料的正確性,後者用來實現資料查詢的優化,目的不同。

唯一性約束與唯一索引有所不同:

1.建立唯一約束會在oracle中建立乙個constraint,同時也會建立乙個該約束對應的唯一索引。

2.建立唯一索引只會建立乙個唯一索引,不會建立constraint。

3.也就是說其實唯一約束是通過建立唯一索引來實現的。

刪除時這兩者也有一定的區別:

1.刪除唯一約束時可以只刪除約束而不刪除對應的索引,所以對應的列還是必須唯一的,

2.而刪除了唯一索引的話就可以插入不唯一的值。

1.主鍵約束和唯一鍵約束均會隱式建立同名的唯一索引,當主鍵約束或者唯一鍵約束失效時,隱式建立的唯一索引會被刪除;

2.主鍵約束要求列值非空,而唯一鍵約束和唯一索引不要求列值非空;

3.相同字段序列不允許重複建立索引;

1.索引鍵值不會儲存空值,所以索引為空時不從索引取值

2.其實就是只索引非null值,唯一索引也一樣,跳過null值不做索引

3.如果兩個字段構成了乙個唯一約束,其中乙個欄位為空,那麼另乙個欄位的值不能出現重複。全部為null的情況,仍然和單字段唯一約束一樣,不會造成重複,

4.唯一鍵是可有多行是null 值的

5.在mysql oracle的innodb引擎中,是允許在唯一索引的字段中出現多個null值的。

聚集索引:

由於聚集索引規定資料在表中的物理儲存順序,因此乙個表只能包含乙個聚集索引。

但該索引可以包含多個列(組合索引),就像**簿按姓氏和名字進行組織一樣。

非聚集索引

資料儲存在乙個地方,索引儲存在另乙個地方,索引帶有指標指向資料的儲存位置。

索引中的專案按索引鍵值的順序儲存,而表中 的資訊按另一種順序儲存(這可以由聚集索引規定)。

oracle主鍵約束 唯一鍵約束和唯一索引的區別

1 主鍵約束和唯一鍵約束均會隱式建立同名的唯一索引,當主鍵約束或者唯一鍵約束失效時,隱式建立的唯一索引會被刪除 2 主鍵約束要求列值非空,而唯一鍵約束和唯一索引不要求列值非空 3 相同字段序列不允許重複建立索引 檢視約束名稱,約束型別 select constraint name,constrain...

oracle 主鍵 唯一鍵值 唯一索引關係

一般都認為一條資料在表中通過主鍵欄位來唯一確定,但是有時候表中並不存在主鍵,但是重複資料插入也會報錯,檢視表結構發現,通過建立唯一鍵值也可以達到之一目的,但是最近有遇到資料庫中沒有唯一鍵 主鍵,重複資料插入也會報錯,查詢後發現存在唯一索引,也達到了資料唯一的目的 1 主鍵約束和唯一鍵約束均會隱式建立...

ORACLE 約束(主鍵 唯一鍵 )

一.主鍵約束 alter table add constraint primary key 1.外部定義 alter tablestudentadd constraintpk idprimary key st id 2.行級定義 create table student st id number 4...