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'
● 如果建表时没有给某列添加unique约束,后期因为需求需要添加,有四种添加unique约束的方法:
//创建表t24,仅一列整型,无约束属性 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);
命名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;
//MySQL中使用drop index删除unique约束 mysql> alter table t23 drop index id; //在非MySQL中,使用drop constraint来删除unique约束 db001> alter table t23 drop constraint id;
P.s:前面介绍的Not Null约束是不允许列有Null值,但允许重复值;本文中介绍的Unique约束是不允许列中出现重复值,但允许有NULL值;由此推得,前面介绍的主键,就是Not Null约束与Unique约束的交集,即列数据不允许有重复值也不允许有NULL值,其实,主键也叫Primary Key约束。
[**] 注:如文中未特别声明转载请注明出自:QingSword.COM