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

温馨提示:本系列博文已经同步到 GitHub,地址为「mysql-tutorial」,欢迎感兴趣的童鞋StarFork,纠错。

唯一键

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

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

增加唯一键

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

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

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

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

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

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

-- 查看表创建语句
show create table my_unique2;
3

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

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

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

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

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

唯一键约束

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

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

更新唯一键 & 删除唯一键

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

删除唯一键的语法为:

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

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

-- 删除唯一键
alter table my_unique3 drop index number;
7

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


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


———— ☆☆☆ —— 返回 -> 史上最简单的 MySQL 教程 <- 目录 —— ☆☆☆ ————

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 zhuanlan_guanli@qq.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

Mock.js前端开发cgi数据模拟工具

1. 什么是Mockjs http://mockjs.com/ ??Mockjs是个能够拦截页面ajax请求并模拟返回数据的小工具,借助Mockjs,前端开发中...

2548
来自专栏源哥的专栏

由于查询语句中日期的格式引起的问题

我这边有一个系统,在一个环境下运行完全正常,但迁到另外一个环境后,其中一个查询功能就莫名其妙的出现了问题,我通过检查,发现有一个很复杂的查询语句,在一个数据库环...

461
来自专栏WindCoder

微信浏览器中reload()无法完成刷新页面的解决方案

今天有一个刷新的需求,先后使用了reload()、replace 方法以及window.location.href三种方式,结果都只是在pc端没问题,移动端微信...

371
来自专栏nummy

使用jsTree树形控件【4】

使用JSON渲染jsTree的话,需要指定JSON的格式,jsTree可以使用两种JSON格式,在标准JSON格式中,没有必需的属性,而且还可以添加自定义的属性...

571
来自专栏linux驱动个人学习

contain_of宏定义

 Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得...

3034
来自专栏zhangdd.com

nginx location匹配规则

~      #波浪线表示执行一个正则匹配,区分大小写 ~*    #表示执行一个正则匹配,不区分大小写 ^~    #^~表示普通字符匹配,如果该选项匹配...

764
来自专栏Python小屋

Python处理文本文件案例一则

问题描述:当前文件夹中有一文件data.txt,其中包含一些自然数,每行一个。要求编写程序,读取data.txt中的所有自然数,将其升序排序之后写入新文件dat...

673
来自专栏飞雪无情的博客

Go语言 | Go 1.9 新特性 Type Alias详解

北京时间2017.08.25,Go1.9正式版发布了。Go1.9经历了2个beta,好几个月,终于定了,发布了正式版本。Go 1.9包含了很多改变,比如类型别名...

744
来自专栏我的博客

if和else匹配问题以及switch问题

$b = 1; $a = 2; if ($a > 1) { echo ‘1’; if ($b > 2) { echo ‘2’; } } else ...

33611
来自专栏pangguoming

Excel 2013中单元格添加下拉列表的方法

使用Excel录入数据的时候我们通常使用下拉列表来限定输入的数据,这样录入数据就很少发生错误了。Excel 2013较以前的版本发生了很大的变化,那么在Exce...

3068

扫描关注云+社区