MYSQL中唯一約束和唯一索引的區別

2022-06-16 21:24:12 字數 871 閱讀 6688

1、唯一約束和唯一索引,都可以實現列資料的唯一,列值可以有null。

2、建立唯一約束,會自動建立乙個同名的唯一索引,該索引不能單獨刪除,刪除約束會自動刪除索引。唯一約束是通過唯一索引來實現資料的唯一。

3、建立乙個唯一索引,這個索引就是獨立,可以單獨刪除。

4、如果乙個列上想有約束和索引,且兩者可以單獨的刪除。可以先建唯一索引,再建同名的唯一約束。

5、如果表的乙個字段,要作為另外乙個表的外來鍵,這個字段必須有唯一約束(或是主鍵),如果只是有唯一索引,就會報錯。

約束是業務檢查,比方說非空約束,check約束,那是檢查欄位非空,是否符合check。而索引是一種資料結構, rowid與字段值的鍵值對.  兩個東西的效果是一樣。但:在建立唯一約束時,會自動建立乙個唯一索引.並且,失效該約束時,索引自動刪除.而建立唯一索引則不會自動建立唯一約束.因此在建表時,如果要建立唯一索引,最好先建唯一索引再建立唯一約束.這樣的話,在進行大批量資料插入時,可以先失效約束,插入完成後再進行索引重建.

除了引文中提到的,要被外來鍵引用必須有唯一約束,還有這個區別:索引的鍵不一定要和唯一約束完全匹配,唯一約束可以只用索引的前導列。

例子:create table t (n1 number,n2 number);

create index t_idx on t(n1,n2);

上面只是建立了兩個列的復合索引,並不要求是唯一索引。

alter table t add constraint t_uk unique (n1) using index t_idx;

可以使用這個索引來建立唯一約束, 而且它只在第乙個列上唯一,也就是說唯一約束比索引更加嚴格。

那麼這個索引的第二個列有什麼意義?有些時候,帶一些冗餘列可以使得你直接從索引中取到所有select的資料而無需回表

唯一約束,主鍵約束,唯一索引

1.unique約束和primary key約束用來保證同一表中指定的列上沒有重複值,這兩個約束都產生唯一索引確保資料一致性,預設情況下,unique約束產生唯一的非聚集索引,primary key約束產生唯一的聚集索引。primary key約束比unique約束嚴格 primary key列不允...

oracle 唯一約束 和 唯一索引

唯一性約束 唯一性約束指表中乙個字段或者多個字段聯合起來能夠唯一標識一條記錄的約束。聯合欄位中,可以包含空值。注 在oracle中,唯一性約束最多可以有32列。唯一性約束可以在建立表時或使用alter table語句建立。唯一性約束和主鍵的區別 主鍵 primary key 所有組成主鍵的列都不能包...

唯一約束和唯一索引區別

1.主鍵約束 primary key 1 主鍵用於唯一地標識表中的每一條記錄,可以定義一列或多列為主鍵。2 是不可能 或很難 更新 3 主鍵列上沒有任何兩行具有相同值 即重複值 不允許空 null 4 主健可作外健,唯一索引不可 2.唯一性約束 unique 1 唯一性約束用來限制不受主鍵約束的列上...