[mysql基础文档]-16-Unique约束

引言

Unique约束能够防止数据表中指定的列中出现两个完全相同的值。

文章目录

0×1.如何在建表时添加Unique约束

● 在创建数据表时,有三种不同的方法可以添加unique约束:

					--方法一:同not null约束一样,直接写在数据类型后面,此时id列数据具有唯一性
					mysql> create table t22(id int unique);

					--另两种方法,效果相同,写在所有列创建语句的最后,用逗号单独隔开,constraint在普通unique约束声明语法中,可以省略(后面介绍的命名unique约束中,必须要写constraint)
					mysql> create table t22(id int,constraint unique(id));
					mysql> create table t22(id int,unique(id));

					--key下面有UNI就代表列拥有unique属性
					mysql> desc t22;
					+-------+---------+------+-----+---------+-------+
					| Field | Type    | Null | Key | Default | Extra |
					+-------+---------+------+-----+---------+-------+
					| id    | int(11) | YES  | UNI | NULL    |       |
					+-------+---------+------+-----+---------+-------+

					--unique约束特性,插入相同值会报错
					mysql> insert into t22 values(1);
					mysql> insert into t22 values(1);
					ERROR 1062 (23000): Duplicate entry '1' for key 'id'
					mysql> insert into t22 values(2);

					mysql> select * from t22;
					+------+
					| id   |
					+------+
					|    1 |
					|    2 |
					+------+
					

● Unique约束不仅限于一列,可以给多列创建联合unique约束,只有当联合的列数据都相同时,才抛出错误:

					--在末尾括号中用逗号隔开每一个联合unique约束成员
					mysql> create table t23(id int,uid int,unique(id,uid));

					mysql> desc t23;
					+-------+---------+------+-----+---------+-------+
					| Field | Type    | Null | Key | Default | Extra |
					+-------+---------+------+-----+---------+-------+
					| id    | int(11) | YES  | MUL | NULL    |       |
					| uid   | int(11) | YES  |     | NULL    |       |
					+-------+---------+------+-----+---------+-------+

					--只有一列数据相同时,数据正常写入
					mysql> insert into t23 values(1,1);
					mysql> insert into t23 values(1,2);

					--当unique联合约束里面的所有成员数据与已经存在的数据相同时,才抛出错误
					mysql> insert into t23 values(1,1);
					ERROR 1062 (23000): Duplicate entry '1-1' for key 'id'
					

0×2.如何给已存在的列添加Unique约束

● 如果建表时没有给某列添加unique约束,后期因为需求需要添加,有四种添加unique约束的方法:

					--创建表t24,仅一列整型,无约束属性
					mysql> create table t24(id int);

					--同not null约束,使用change参数改变列属性(重命名,添加属性都可以通过change)
					mysql> alter table t24 change id id int unique;

					--下面三种方法效果同上,在MySQL中都能给id列添加unique属性
					mysql> alter table t24 modify id int unique;

					mysql> alter table t24 add unique(id);

					mysql> alter table t24 add constraint unique(id);
					

0×3.如何创建命名Unique约束

命名Unique约束与普通约束功能相同,可以通过命名,添加注释,解释这一列其数据是什么,为日后的维护做铺垫,下面是命名Unique约束创建,追加,删除实例:

					--建表时创建命名Unique约束只能将语句放在所有列声明的结尾,CustomName是自定义名称
					mysql> create table t24(id int,constraint CustomName unique(id));

					--如果建表时id列没有约束属性,可以用下面的方法给id列添加一个命名Unique约束
					mysql> alter table t24 add constraint CustomName unique(id);

					--MySQL中删除命名Unique约束的方法如下
					mysql> alter table t24 drop index CustomName;

					--其他类型数据库删除命名约束的方法如下,两者参数有细微差别
					mysql> alter table t24 drop constraint CustomName;
					

0×4.如何删除Unique约束

					--MySQL中使用drop index删除id列的unique约束
					mysql> alter table t23 drop index id;

					--在非MySQL中,使用drop constraint来删除id列的unique约束
					db001> alter table t23 drop constraint id;
					

P.s:前面介绍的Not Null约束是不允许列有Null值,但允许重复值;本文中介绍的Unique约束是不允许列中出现重复值,但允许有NULL值;由此推得,前面介绍的主键,就是Not Null约束与Unique约束的交集,即列数据不允许有重复值也不允许有NULL值,其实,主键也叫Primary Key约束。