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