Oracle之唯一性约束(UNIQUEConstraint)用法详解

来源:互联网 发布:萌乐网络 编辑:程序博客网 时间:2024/06/06 03:50

Oracle | PL/SQL唯一索引(Unique Constraint)用法

1 目标

用示例演示如何创建、删除、禁用和使用唯一性约束。

2 什么是唯一性约束?

唯一性约束指表中一个字段或者多个字段联合起来能够唯一标识一条记录的约束。联合字段中,可以包含空值。

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

唯一性约束可以在创建表时或使用ALTER TABLE语句创建。

3 唯一性约束和主键的区别

 

主键(Primary Key):所有组成主键的列都不能包含空值。唯一性约束(Unique Constraint):如果唯一性约束由多列组成,其中的部分列可以包含空值。Oracle中不容许在相同列上既创建主键又创建唯一性约束。

 

4 创建表时定义唯一性约束

1)语法:

 

?
1
2
3
4
5
6
7
CREATETABLE table_name
(
    column1 datatype null/notnull,
    column2 datatype null/notnull,
    ...
    CONSTRAINTconstraint_name UNIQUE(column1, column2,...,column_n)
);

2)基于单列的唯一性约束示例:

?
1
2
3
4
5
6
7
createtable tb_supplier
(
  supplier_id          number notnull
 ,supplier_name        varchar2(50)
 ,contact_name         varchar2(50)
 ,CONSTRAINTtb_supplier_u1 UNIQUE(supplier_id)--创建表时创建唯一性约束
);

3)基于多列的唯一性约束示例:

?
1
2
3
4
5
6
7
8
createtable tb_products
(
  product_id        number notnull,
  product_name      number notnull,
  product_type      varchar2(50),
  supplier_id       number,
  CONSTRAINTtb_products_u1 UNIQUE(product_id, product_name) --定义复合唯一性约束
);

5 使用ALTER TABLE语法创建唯一性约束

1)语法

?
1
2
3
ALTERTABLE table_name
ADDCONSTRAINT 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
droptable tb_supplier;
droptable tb_products;
 
createtable tb_supplier
(
  supplier_id          number notnull
 ,supplier_name        varchar2(50)
 ,contact_name         varchar2(50)
);
 
createtable tb_products
(
  product_id        number notnull,
  product_name      number notnull,
  product_type      varchar2(50),
  supplier_id       number
);

3)基于单列的唯一性约束

?
1
2
3
altertable tb_supplier
addconstraint  tb_supplier_u1
unique(supplier_id);

4)基于多列的唯一性约束

?
1
2
3
altertable tb_products
addconstraint  tb_products_u1
unique(product_id,product_name);

6 禁用唯一性约束

1)语法:

?
1
2
ALTERTABLE table_name
DISABLECONSTRAINTconstraint_name;

2)示例:

?
1
2
ALTERTABLE tb_supplier
DISABLECONSTRAINT tb_supplier_u1;

7 使用唯一性约束

1)语法:

?
1
2
ALTERTABLE table_name
ENABLECONSTRAINTconstraint_name;

2)示例:

?
1
2
ALTERTABLE tb_supplier
ENABLECONSTRAINTtb_supplier_u1;

8 删除唯一性约束

1)语法:

?
1
2
ALTERTABLE table_name
DROPCONSTRAINT constraint_name;

2)示例:

?
1
2
ALTERTABLE tb_supplier DROPCONSTRAINT tb_supplier_u1;
ALTERTABLE tb_products DROPCONSTRAINT tb_products_u1;
-----------------------------------------------------------------------------------
0 0