oracle 唯一約束 和 唯一索引

2021-07-15 03:40:41 字數 1459 閱讀 5729

唯一性約束

唯一性約束指表中乙個字段或者多個字段聯合起來能夠唯一標識一條記錄的約束。聯合欄位中,可以包含空值。

注:在oracle中,唯一性約束最多可以有32列。

唯一性約束可以在建立表時或使用alter table語句建立。

唯一性約束和主鍵的區別

主鍵(primary key):所有組成主鍵的列都不能包含空值。唯一性約束(unique constraint):如果唯一性約束由多列組成,其中的部分列可以包含空值。oracle中不容許在相同列上既建立主鍵又建立唯一性約束。

1、建立聯合約束(下面該條sql的作用是staff_id, first_name, last_name不能同時相等)

eg:alter table t_gjcx_emp

add constraint t_gjcx_emp_joint_key unique (staff_id, first_name, last_name)

(1)基於單列的唯一性約束

alter table tb_supplier

add constraint  tb_supplier_u1

unique (supplier_id);

(2)基於多列的唯一性約束

alter table tb_products

add constraint  tb_products_u1

unique (product_id,product_name);

2 、禁用唯一性約束

(1)語法:

alter table table_name

disable constraint constraint_name;

(2)示例:

alter table tb_supplier

disable constraint  tb_supplier_u1;

問題:

建立表的唯一性索引【create unique index idx_ut on t(nvl2(nullif(b,3),a,null),nvl2(nullif(b,3),b,null),nvl2(nullif(b,3),c,null))】

和建立表的唯一性約束的異同:

唯一約束可以用於保證在基表中增加一條記錄時,乙個或多個列值是唯一的。如果已經給乙個或以上列定義了唯一約束,那麼任何操作都不可能替換這些列中的複製的值。儘管唯一的、系統要求的索引是用來加強唯一約束,但是定義唯一約束和建立唯一索引之間還是有區別的。即使這二者之間都可以增強唯一性,唯一索引允許null值並且一般不能用在指示性約束中。換句話說,唯一約束不允許null值並能在外鍵規範中使用( "null"的意思就是列值不明確並且和其他值不同,還包括其他null值)。

總結:唯一索引就是唯一索引,唯一約束是通過唯一索引來實現的,建立唯一約束時會建立乙個唯一索引 前提條件是約束列上沒有唯一索引。

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

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

唯一約束和唯一索引區別

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

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

在使用toad來操作oracle資料庫時,會注意到建立約束時有primary key check unique和foreign key四種型別的約束,這與sql server中的約束沒有什麼區別,這裡的check約束除了用於一般的check約束外,在oracle中也用於非空約束的實現。也就是說如果乙...