史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」

唯一键

唯一键:每张表往往有多个字段需要具有唯一性,数据不能重复,但是在每张表中,只能有一个主键,因此唯一键就是用来解决表中多个字段需要具有唯一性的问题

唯一键的本质与主键差不多,唯一键默认的允许字段为空,而且可以多个字段为空,因此空字段不参与唯一性的比较。
 

增加唯一键

增加唯一键的方法和主键类似,有 3 种方法,分别为:

第一种:在创建表的时候,字段后面直接添加unique或者unique key关键字
 

[plain] view plaincopy

  1. -- 增加唯一键  
  2. create table my_unique(  
  3. number char(10) unique comment '学号',  
  4. name varchar(20) not null  
  5. )charset utf8;  



史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」

第 2 种:在所有字段之后,增加unique key(字段列表),可以设置复合唯一键
 

[plain] view plaincopy

  1. -- 测试唯一键  
  2. create table my_unique2(  
  3. number char(10) not null,  
  4. name varchar(20) not null,  
  5. unique key(number)  
  6. )charset utf8;  



史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」

观察上图,咱们可能会发现一个问题,那就是:咱们设置的唯一键UNI,怎么变成了主键PRI啊?这是由于当唯一键满足非空条件的时候,其性质就和主键一样啦,因此在表中显示为PRI. 当然,在咱们执行如下 SQL 语句的时候,其就会表现出真正的性质:
 

[plain] view plaincopy

  1. -- 查看表创建语句  
  2. show create table my_unique2;  



史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」

第 3 种:在创建表之后,增加唯一键
 

[plain] view plaincopy

  1. -- 创建未设置唯一键的表  
  2. create table my_unique3(  
  3. id int primary key auto_increment,  
  4. number char(10) not null,  
  5. name varchar(20) not null  
  6. )charset utf8;  



史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」

如上图所示,表my_unique3未设置唯一键。接下来,执行如下 SQL 语句,进行测试:
 

[plain] view plaincopy

  1. -- 增加唯一键  
  2. alter table my_unique3 add unique key(number);  



史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」

如上图所示,咱们已经成功向表中增加唯一键啦!
 

唯一键约束

唯一键与主键本质相同,区别在于:唯一键允许字段值为空,并且允许多个空值存在
 

[plain] view plaincopy

  1. -- 测试唯一键约束  
  2. insert into my_unique values(null,'Charies');  
  3. insert into my_unique values(null,'Guo');  



史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」
 

更新唯一键 & 删除唯一键

在表中,更新唯一键的时候,可以不用先删除唯一键,因为表的唯一键允许有多个。

删除唯一键的语法为:

基本语法:alter table + 表名 + drop index + 索引名字;

在这里,唯一键默认使用字段名作为索引名。
 

[plain] view plaincopy

  1. -- 删除唯一键  
  2. alter table my_unique3 drop index number;  



史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」

如上图所示,显然咱们已经成功删除表中的唯一键啦!

温馨提示:符号+表示连接的意思。