主鍵:
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...