[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约束。