
5.5 唯一性约束

当表中除主键列外,还有其他字段需要保证取值不重复时,可以使用唯一性约束。尽管唯一性约束与主键约束都具有强制唯一性,但对于非主键字段应使用唯一性约束,而非主键约束,唯一性约束也被称为UNIQUE约束。
5.5.1 创建表时添加唯一性约束
在MySQL中,创建唯一性约束比较简单,只需要在列的数据类型后面加上UNIQUE关键字就可以了。创建表时添加唯一性约束的语法格式如下:

主要参数介绍如下。
- UNIQUE:UNIQUE约束的关键字。
【实例12】在test数据库中,定义数据表empinfo,将员工名称列设置为UNIQUE约束。输入如下SQL语句:

单击“执行”按钮,即可完成添加唯一性约束的操作,如图5-25所示。执行完成后,使用“DESC empinfo;”语句即可看到该数据表的结构,在其中可以查看创建的唯一性约束,如图5-26所示。
注意:一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY声明;声明为PRIMAY KEY的列不允许有空值,但是声明为UNIQUE的字段允许空值(NULL)的存在。

图5-25 添加UNIQUE约束

图5-26 查看添加的UNIQUE约束
5.5.2 修改表时添加唯一性约束
修改表时添加唯一性约束的方法只有一种,而且在添加唯一性约束时,需要保证添加唯一性约束的列中存放的值没有重复的。修改表时添加唯一性约束的语法格式如下:
ALTER TABLE table_name ADD CONSTRAINT uq_name UNIQUE(col_name);
主要参数介绍如下。
- table_name:表名,它是要添加唯一性约束列所在的表名。
- CONSTRAINT uq_name:添加名为uq_name的约束。该语句可以省略,省略后系统会为添加的约束自动生成一个名字。
- UNIQUE(col_name):唯一性约束的定义,UNIQUE是唯一性约束的关键字,col_name是唯一性约束的列名。如果想要同时为多个列设置唯一性约束,就要省略掉唯一性约束的名字,名字由系统自动生成。
【实例13】如果在创建empinfo时没有添加唯一性约束,现在需要给empinfo表中的名称列添加唯一性约束。输入如下SQL语句:
ALTER TABLE empinfo ADD CONSTRAINT uq_empinfo_name UNIQUE(name);
单击“执行”按钮,即可完成添加唯一性约束的操作,如图5-27所示。
执行完成后,使用“DESC empinfo;”语句即可看到该数据表的结构,在其中可以查看添加的唯一性约束,如图5-28所示。

图5-27 执行SQL语句

图5-28 “索引/键”对话框
5.5.3 删除表中的唯一性约束
任何一个约束都是可以被删除的,删除唯一性约束的方法很简单,具体的语法格式如下:
ALTER TABLE table_name DROP [INDEX|KEY] index_name;
主要参数介绍如下。
- table_name:表名。
- index_name:添加唯一约束的名称。
【实例14】删除empinfo表中名称列的唯一性约束。输入如下SQL语句:
ALTER TABLE empinfo DROP INDEX name;
单击“执行”按钮,即可完成删除UNIQUE约束的操作,如图5-29所示。
执行完成后,使用“DESC empinfo;”语句即可看到该数据表的结构,在其中可以查看添加的唯一性约束被删除,如图5-30所示。

图5-29 删除唯一约束

图5-30 删除用户名称列的唯一约束