![MySQL入门很轻松(微课超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/406/32858406/b_32858406.jpg)
5.5 唯一性约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P107_24023.jpg?sign=1739279095-kRezmi7tkFKdPBlOQtbVDQfeXsfXKMVP-0-b6e406704a1eb5b360901d9835db9aef)
当表中除主键列外,还有其他字段需要保证取值不重复时,可以使用唯一性约束。尽管唯一性约束与主键约束都具有强制唯一性,但对于非主键字段应使用唯一性约束,而非主键约束,唯一性约束也被称为UNIQUE约束。
5.5.1 创建表时添加唯一性约束
在MySQL中,创建唯一性约束比较简单,只需要在列的数据类型后面加上UNIQUE关键字就可以了。创建表时添加唯一性约束的语法格式如下:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P107_24026.jpg?sign=1739279095-Vh2LViZgyT7fpz9HEdrsiJCbKtIQPmy7-0-f0f56aa1fd077f4cadd3e23c547e28ae)
主要参数介绍如下。
- UNIQUE:UNIQUE约束的关键字。
【实例12】在test数据库中,定义数据表empinfo,将员工名称列设置为UNIQUE约束。输入如下SQL语句:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P107_24027.jpg?sign=1739279095-ORQE3sBrD0R7R2zHoxhsvH94vpOJSMAh-0-6c65c87be875202e0bb1706879dd53cf)
单击“执行”按钮,即可完成添加唯一性约束的操作,如图5-25所示。执行完成后,使用“DESC empinfo;”语句即可看到该数据表的结构,在其中可以查看创建的唯一性约束,如图5-26所示。
注意:一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY声明;声明为PRIMAY KEY的列不允许有空值,但是声明为UNIQUE的字段允许空值(NULL)的存在。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P108_5101.jpg?sign=1739279095-WTmvrRoZpYzXv9yrCFYHmSPNZk4j6o2B-0-643f2b836e6f7806eac1d4c2f547d707)
图5-25 添加UNIQUE约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P108_5102.jpg?sign=1739279095-JsOZipicACJOwXCe5TQUGXLuvrxdHLNk-0-915d08f2a62e59f25aa49b76208db47f)
图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所示。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P108_5134.jpg?sign=1739279095-VXrSjxfVXI5fr9LyC4heFKs8VqfmLXIc-0-c98bbc9d9ee042393c4e6407dc94848e)
图5-27 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P108_5135.jpg?sign=1739279095-6Xr8c83O9zIUhgXWZBB48EdoSvgiZiqc-0-f1485b7c308768cd371ae2d46902ca60)
图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所示。
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P109_5170.jpg?sign=1739279095-dnVnLF4R15fKEAMw3IuAcTwTYRUD0orz-0-2313cf42700565958a08b984104c1c0e)
图5-29 删除唯一约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P109_5171.jpg?sign=1739279095-5lmikpXW4VN68gFC6eoppLSVPYb7FiU1-0-5ccb10bd08635e1915055b62a5727848)
图5-30 删除用户名称列的唯一约束