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;

--------------------------------------分割线 --------------------------------------

rlwrap - 解决Linux下SQLPLUS退格、上翻键乱码问题

SQLPLUS spool 到动态日志文件名

Oracle SQLPLUS提示符设置

通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度

PL/SQL Developer实用技巧分享

--------------------------------------分割线 --------------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6803e2cf2f0f2764d6945182c271115a.html