史上最简单的 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 教程 <- 目录 —— ☆☆☆ ————

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

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小灰灰

linux C语言实现文件锁

flock函数说明 flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定整个文件,无法锁定文...

57870
来自专栏C/C++基础

ERROR 1062 (23000) at line 1: Duplicate entry '1332883220' for key 'group_key'

我有一个数据表,记录一个QQ号加好友的活跃天数、加好友次数、加好友的toUin数等信息。数据表的建表语句如下:

18740
来自专栏逸鹏说道

SQL Server 阻止了对组件“xp_cmdshell”的 过程“sys.xp_cmdshell”的访问。。。

今天在创建数据库的时候突然发现,xp_cmdshell的存储过程不能用了,网上一搜,发现大部分都是只关闭安全配置,然后就有了下文 ? 代码:具体的看注释,值得一...

32280
来自专栏淡定的博客

sql注入入门学习(数字型)(连载中)

在MySQL中,表名存放在information_schema数据库下tables表table_name字段中、查表名我们主要用到的是TABLES表

39240
来自专栏散尽浮华

Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

众所周知,binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlo...

43480
来自专栏维C果糖

史上最简单的 MySQL 教程(二十)「数据的高级操作 之 主键冲突」

当主键存在冲突(duplicate key)的时候,可以选择性的进行处理,即更新或替换。

374110
来自专栏程序猿

SQL注入分析服务器类型

分析数据库服务器类型 一般来说,ACCESS与SQL-SERVER是最常用的数据库服务器,尽管它们都支持T-SQL标准,但还有不同之处,而且不同的数据库有不同的...

33860
来自专栏个人随笔

MySQL 关于存储过程那点事

存储例程是存储在数据库服务器中的一组sql语句,通过在查询中调用一个指定的名称来执行这些sql语句命令. 简介 SQL语句需要先编译然后执行,而存储过程(Sto...

48180
来自专栏小怪聊职场

MySQL(一)|性能分析方法、SQL性能优化和MySQL内部配置优化

819100
来自专栏java达人

PostgreSQL中的Schema

一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突;...

22590

扫码关注云+社区

领取腾讯云代金券