oracle 唯一约束 和 唯一索引
2016-07-18 11:43
381 查看
唯一性约束
唯一性约束指表中一个字段或者多个字段联合起来能够唯一标识一条记录的约束。联合字段中,可以包含空值。
注:在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值)。
总结:唯一索引就是唯一索引,唯一约束是通过唯一索引来实现的,创建唯一约束时会创建一个唯一索引 前提条件是约束列上没有唯一索引。
唯一性约束指表中一个字段或者多个字段联合起来能够唯一标识一条记录的约束。联合字段中,可以包含空值。
注:在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值)。
总结:唯一索引就是唯一索引,唯一约束是通过唯一索引来实现的,创建唯一约束时会创建一个唯一索引 前提条件是约束列上没有唯一索引。
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle Containers for J2EE远程安全漏洞(CVE-2014-0413)
- Oracle 10g R2不能使用EM的问题
- 表空间操作
- PreparedStatement中in子句的处理
- VMware下RedHat4.8_64位安装Oracle 10g RAC--简略脚本
- oracle sql日期比较
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- OS block size和Oracle block size,查找OS Blocksize的方法
- oracle中创建数据库和表空间的几点总结
- 数据库自动备份脚本
- oracle的nvl函数的使用介绍
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解