1 目标
用示例演示如何创建、删除、禁用和使用唯一性约束。
2 什么是唯一性约束?
唯一性约束指表中一个字段或者多个字段联合起来能够唯一标识一条记录的约束。联合字段中,可以包含空值。
注:在Oracle中,唯一性约束最多可以有32列。
唯一性约束可以在创建表时或使用ALTER TABLE语句创建。
3 唯一性约束和主键的区别
主键(Primary Key):所有组成主键的列都不能包含空值。唯一性约束(Unique Constraint):如果唯一性约束由多列组成,其中的部分列可以包含空值。Oracle中不容许在相同列上既创建主键又创建唯一性约束。
4 创建表时定义唯一性约束
1)语法:
1
2
3
4
5
6
7
|
CREATE
TABLE
table_name
(
column1 datatype
null
/
not
null
,
column2 datatype
null
/
not
null
,
...
CONSTRAINT
constraint_name
UNIQUE
(column1, column2,...,column_n)
);
|
2)基于单列的唯一性约束示例:
1
2
3
4
5
6
7
|
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)基于多列的唯一性约束示例:
1
2
3
4
5
6
7
8
|
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)语法
1
2
3
|
ALTER
TABLE
table_name
ADD
CONSTRAINT
constraint_name
UNIQUE
(column1, column2, ... , column_n);
|
2)示例准备,先创建表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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)基于单列的唯一性约束
1
2
3
|
alter
table
tb_supplier
add
constraint
tb_supplier_u1
unique
(supplier_id);
|
4)基于多列的唯一性约束
1
2
3
|
alter
table
tb_products
add
constraint
tb_products_u1
unique
(product_id,product_name);
|
6 禁用唯一性约束
1)语法:
1
2
|
ALTER
TABLE
table_name
DISABLE
CONSTRAINT
constraint_name;
|
2)示例:
1
2
|
ALTER
TABLE
tb_supplier
DISABLE
CONSTRAINT
tb_supplier_u1;
|
7 使用唯一性约束
1)语法:
1
2
|
ALTER
TABLE
table_name
ENABLE
CONSTRAINT
constraint_name;
|
2)示例:
1
2
|
ALTER
TABLE
tb_supplier
ENABLE
CONSTRAINT
tb_supplier_u1;
|
8 删除唯一性约束
1)语法:
1
2
|
ALTER
TABLE
table_name
DROP
CONSTRAINT
constraint_name;
|
2)示例:
1
2
|
ALTER
TABLE
tb_supplier
DROP
CONSTRAINT
tb_supplier_u1;
ALTER
TABLE
tb_products
DROP
CONSTRAINT
tb_products_u1;
|