唯一性约束
唯一性约束指表中一个字段或者多个字段联合起来能够唯一标识一条记录的约束。联合字段中,可以包含空值。
注:在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值)。
总结:唯一索引就是唯一索引,唯一约束是通过唯一索引来实现的,创建唯一约束时会创建一个唯一索引 前提条件是约束列上没有唯一索引。