![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=1739178095-80fkoWmT3IudbVPOWuJGeqLtpyZUg1Hn-0-7845698e8b5e31338876cfee67c0339c)
当表中除主键列外,还有其他字段需要保证取值不重复时,可以使用唯一性约束。尽管唯一性约束与主键约束都具有强制唯一性,但对于非主键字段应使用唯一性约束,而非主键约束,唯一性约束也被称为UNIQUE约束。
5.5.1 创建表时添加唯一性约束
在MySQL中,创建唯一性约束比较简单,只需要在列的数据类型后面加上UNIQUE关键字就可以了。创建表时添加唯一性约束的语法格式如下:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P107_24026.jpg?sign=1739178095-zJAYN3zizX2bnmmu5yYdPGBiKKqmumc4-0-59564b908ab2f852b02383f18cff3fab)
主要参数介绍如下。
- UNIQUE:UNIQUE约束的关键字。
【实例12】在test数据库中,定义数据表empinfo,将员工名称列设置为UNIQUE约束。输入如下SQL语句:
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P107_24027.jpg?sign=1739178095-LhZ1z0MS3tVbc35imACc5Jb3YD5SvYo5-0-787985b6ddee6e4617a4f67bb4663332)
单击“执行”按钮,即可完成添加唯一性约束的操作,如图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=1739178095-9AewjQO86v797mY1a0pCZaXFHwSm2zNw-0-373de91d1673cd170c1110aa87576639)
图5-25 添加UNIQUE约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P108_5102.jpg?sign=1739178095-7Va9Ky3JAEcvYQMfD73UA7OZuXdv4hSi-0-3cb80d1dab20d1c849a387a97b41a8b9)
图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=1739178095-z8OieK5SUcAT7NaOcVLat6iyNjHWvAWD-0-3f29a28b196f95057306c51a3d9ef542)
图5-27 执行SQL语句
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P108_5135.jpg?sign=1739178095-2bfHdcnTVUATPXabhG7I1BXa4tlZennP-0-55d0df253b8e4858c354479f9a7fd38a)
图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=1739178095-zao5QpxXZVGwWBOuH4xRxmXGGFH0UdiI-0-d3b10b06c335f4d7638d40e3aa1f3247)
图5-29 删除唯一约束
![](https://epubservercos.yuewen.com/D53A3A/17640317506035206/epubprivate/OEBPS/Images/Figure-P109_5171.jpg?sign=1739178095-s0WQrAK01kaywAObZXZWhBpmL3ptM6aG-0-bed7c4050c5659310488b5f7318fe897)
图5-30 删除用户名称列的唯一约束