Oracle | PL/SQL唯一索引(Unique Constraint)用法
1 目标
用示例演示如何创建、删除、禁用和使用唯一性约束。
2 什么是唯一性约束?
唯一性约束指表中一个字段或者多个字段联合起来能够唯一标识一条记录的约束。联合字段中,可以包含空值。
注:在Oracle中,唯一性约束最多可以有32列。
唯一性约束可以在创建表时或使用ALTER TABLE语句创建。
3 唯一性约束和主键的区别
- 主键(Primary Key):所有组成主键的列都不能包含空值。
- 唯一性约束(Unique Constraint):如果唯一性约束由多列组成,其中的部分列可以包含空值。
- Oracle中不容许在相同列上既创建主键又创建唯一性约束。
4 创建表时定义唯一性约束
1)语法:
-
CREATE TABLE table_name
-
(
-
column1 datatype null/not null,
-
column2 datatype null/not null,
-
...
-
CONSTRAINT constraint_name UNIQUE (column1, column2,...,column_n)
-
);
2)基于单列的唯一性约束示例:
-
create table tb_supplier
-
(
-
supplier_id number not null
-
,supplier_name varchar2(50)
-
,contact_name varchar2(50)
-
,CONSTRAINT tb_supplier_u1 UNIQUE (supplier_id)--创建表时创建唯一性约束
-
);
3)基于多列的唯一性约束示例:
-
create table tb_products
-
(
-
product_id number not null,
-
product_name number not null,
-
product_type varchar2(50),
-
supplier_id number,
-
CONSTRAINT tb_products_u1 UNIQUE (product_id, product_name) --定义复合唯一性约束
-
);
5 使用ALTER TABLE语法创建唯一性约束
1)语法
-
ALTER TABLE table_name
-
ADD CONSTRAINT constraint_name
-
UNIQUE (column1, column2, ... , column_n);
2)示例准备,先创建表
-
drop table tb_supplier;
-
drop table tb_products;
-
create table tb_supplier
-
(
-
supplier_id number not null
-
,supplier_name varchar2(50)
-
,contact_name varchar2(50)
-
);
-
create table tb_products
-
(
-
product_id number not null,
-
product_name number not null,
-
product_type varchar2(50),
-
supplier_id number
-
);
3)基于单列的唯一性约束
-
alter table tb_supplier
-
add constraint tb_supplier_u1
-
unique (supplier_id);
4)基于多列的唯一性约束
-
alter table tb_products
-
add constraint tb_products_u1
-
unique (product_id,product_name);
6 禁用唯一性约束
1)语法:
-
ALTER TABLE table_name
-
DISABLE CONSTRAINT constraint_name;
2)示例:
-
ALTER TABLE tb_supplier
-
DISABLE CONSTRAINT tb_supplier_u1;
7 使用唯一性约束
1)语法:
-
ALTER TABLE table_name
-
ENABLE CONSTRAINT constraint_name;
2)示例:
-
ALTER TABLE tb_supplier
-
ENABLE CONSTRAINT tb_supplier_u1;
8 删除唯一性约束
1)语法:
-
ALTER TABLE table_name
-
DROP CONSTRAINT constraint_name;
2)示例:
-
ALTER TABLE tb_supplier DROP CONSTRAINT tb_supplier_u1;
-
ALTER TABLE tb_products DROP CONSTRAINT tb_products_u1;
---------------------------------------------------------------------------------------------------------
如果您们在尝试的过程中遇到什么问题或者我的代码有错误的地方,请给予指正,非常感谢!
联系方式:david.louis.tian@outlook.com
版权@:转载请标明出处!
----------------------------------------------------------------------------------------------------------