所谓唯一性约束(unique constraint)不过是数据表内替代键的另一个名称而已。替代键(alternate key)可以是数据表内不作为主键的其他任何列,只要该键对该数据表唯一即可。换句话说,在唯一列内不允许出现数据重复的现象。

   唯一性约束用来确保列值的唯一性,通过在列级别使用UNIQUE关键字来实现。一般情况下,在为列指定主键之后,Oracle会自动为列设置唯一性约束,唯一性约束的定义语法如下:

   column_name data_type CONSTRAINT constraint_name UNIQUE

   例如图书管理系统有一个图书分类表,这个表要求图书分类名称不能重复,为此在创建Cate_Name列时,可以通过UNIQUE指定一个唯一性约束,如下代码所示:

CREATE TABLE bookCategory
(
  Cate_Id NUMBER,                                    --图书分类Id
  Cate_Name VARCHAR2(200),                          --图书分类名称,该名称要求唯一
  Cate_Description VARCHAR(1000),                 --图书分类描述
  CONSTRAINT CateId_pk PRIMARY KEY (Cate_Id),   --主键
  CONSTRAINT Cate_Name_uq UNIQUE (Cate_Name)   --唯一性约束  
)

该表创建之后,如果使用如下的语句向表中插入两个相同的分类名称,SQL*Plus将跳出错误提示信息:

SQL> INSERT INTO bookCategory VALUES(1,'计算机应用','关于软件程序设计相关的书籍');
已创建1行
SQL> INSERT INTO bookCategory VALUES(2,'计算机应用','关于计算机设计相关的书籍');
INSERT INTO bookCategory VALUES(2,'计算机应用','关于计算机设计相关的书籍')
*
第1行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.CATE_NAME_UQ)

可以看到,因为向表bookCategory中插入了两个具有相同内容的分类名称,Oracle检测到违反了唯一性约束,因此回滚所作的更改并跳出错误提示。