MySQL数据库唯一索引
引言:什么是索引
创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引有3种方式,分别是1.创建表的时候创建索引、2.在已经存在的表上创建索引和使用3.ALTER TABLE语句来创建索引。
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
一、唯一索引概述
所谓唯一索引,就是在创建索引时,限制索引的字段值必须是唯一的。通过该类型的索引可以比普通索引更快速地查询某条记录。
二、创建唯一索引
1.创建表时创建唯一索引
CREATE TABLE tablename(
propname1 type1,
……
propnamen type..n,
UNIQUE INDEX | KEY [indexname] (propnamen [(length)] [ ASC | DESC ] )
);
注意:
参数UNIQUE INDEX和UNIQUE KEY是用来指定字段为索引的,两者选择其中之一即可;
参数indexname是索引名字,可省略;
参数propnamen是索引对应的字段的名称,该字段必须为前面定义好的字段;
参数length是可选参数,其指索引的长度,必须是字符串类型才可以使用;
参数ASC和DESC都是可选参数,ASC表示升序排列,DESC表示降序排列,如果不指定,则为升序。
下面由SQL语句演示
create table class (
id int ,
name varchar(128),
teacher varchar(64),
unique index name_index(name)
);
查看一下表的详细结构
使用insert插入一些数据,并通过唯一索引来进行检索
insert into class values(1,'一班','王老师'),(2,'二班','李老师');
由检索结果我们可知,这里的检索使用到了定义的唯一索引
当我们将检索方式改为模糊查找时
由检索结果我们可知,这里并没有使用定义的唯一索引。其实数据库本身有一些优化,并不是创建了索引就一定会用,至于什么时候检索会使用索引,就要看数据库的内部机制了,感兴趣的小伙伴可以深入学习一下数据库的内部系统;
当我们将唯一索引的字段加上unique约束后又会是什么情形呢?👇
唯一索引与unique约束共存时
当唯一索引与unique约束共同作用在同一字段时,唯一索引便显得有些重复;下面会用SQL语句演示👇;
创建一张包含唯一索引与unique约束共同作用的表
create table class(
id int,
name varchar(128) unique,
teacher varchar(64),
unique index name_index (name)
);
查看一下表的详细结构
插入与上面相同数据,并进行检索
由结果我们可得知,虽然表中存在唯一索引,但当我们进行检索时,MySQL还是根据唯一约束来检索。事实上,当我们给某给字段定义了唯一约束时,MySQL为了保证唯一性,便会自动给这个字段添加唯一索引,而之后再手动给这个字段添加唯一索引便是一些多余操作
2、已存在的表上创建索引
2.1、使用create语句
CREATE UNIQUE INDEX indexname
ON tablename (propname [(length)] [ASC|DESC]);
下面通过简单SQL语句演示
create table class(
id int ,
name varchar(128),
teacher varchar(64)
);
create unique index name_index
on class(name);
2.2、使用alter table语句
ALTER TABLE tablename ADD UNIQUE INDEX | KEY
indexname (propname [(length)] [ASC|DESC]);
下面通过简单SQL语句演示
create table class(
id int ,
name varchar(128),
teaccher varchar(64)
);
alter table class add unique
index name_index (name);
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
相关文章
- 微信emoji表情编码 、MySQL 存储 emoji 表情符号字符集
- mysql之通过cmd连接远程数据库
- mysql数据库-索引-长期维护
- CentOS下httpd下php 连接mysql 本机可以,外网报错Could not connect: Can't connect to MySQL server on '127.0.0.1' (13)2003 原因解析
- 数据库基础之Mysql(1)常用命令
- 阿里规范 - 五、MySQL 数据库 - (一)建表规约 - 2 - 数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑
- MySQL数据库order by 主键(索引) 查询慢解决方案
- MySQL ADDDATE(d,n)计算起始日期 d 加上 n 天的日期
- Mysql 数据类型(整数、浮点数、定点数、字符串)【类型取值范围】
- 【实施工程师】MySQL导入大sql 文件大小限制问题的解决
- 〖Python 数据库开发实战 - MySQL篇⑬〗- 数据库的索引机制
- 〖Python 数据库开发实战 - MySQL篇㉘〗- MySQL 日期函数
- mysql数据库(7):表中检索信息
- 数据库实践丨MySQL多表join分析
- Python编程:records库操作SQL查询MySQL数据库
- mysql 数据库的悲观锁和乐观锁
- mysql分布式数据库的逻辑库、物理库和分库分表和TDDL图文详解
- 改动MySQL数据库port号 2.0
- 99.第十九章 MySQL数据库 -- MySQL的索引(九)
- 数据结构与算法_48 _ B+树:MySQL数据库索引是如何实现的
- Mysql-Proxy代理配置