MySQL 索引 与 事务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 索引 与 事务相关的知识,希望对你有一定的参考价值。

简介

1·索引及分类
2·创建及查看索引
3·事务的概念及特点
4·事务的操作
5·总结


拓展

在开始了解索引之前,得学会安装 mysql 和它的一些基本的命令,可以看看之前的一片文章:MySQL安装与基本命令


索引及分类

1·索引的概念:

什么是索引,不用专业术语来描述,通俗的来讲,就是一本书的目录,或一本小说的目录,有了目录就可以快速定位我需要找到的内容。专业点的来讲,就是为了提高数据库的搜索效率而对某写字段中的值建立的目录。


2·索引的作用

知道了它的概念,那么作用不言而喻。但是有利有弊,得到什么就必须牺牲什么,索引使我们可以加快查询表中的记录,那么也会付出相对应的代价:1·增加了数据库的存储空间;2·在插入和修改数据时要花费较多的时间。
以上是代价,但是相比代价,索引的作用更为突出
1·最主要的就是有了索引就会加快数据查询速度
2·当库中的表很大时,索引的作用就体现的非常明显,一个字’快‘
3·降低数据库的 I0 成本,就是输出和输入成本
4·创建唯一性索引,可以保持数据库表中每一行数据的唯一性
5·加快表与表之间的连接


3·索引的分类

1·普通索引:这是最基本的索引类型,没有唯一性限制
2·唯一性索引:和普通索引基本相同,唯一的区别是索引列的所有值只能是唯一的
3·主键索引:是唯一索引的特定类型,它必须指定为“PRIMARY KEY”。在数据库中为表定义主键将自动创建主键索引。
4·全文索引,索引类型为FULLTEXT,全文索引可以在CHAR、VARCHAR的列上创建
5·单列索引与多列索引:索引可以是单列上创建的索引,可以是多列上创建的索引


4·创建索引的原则依据

凡是有规矩,创建索引也必须有条件的,不能乱创建,乱创建反而会增加数据库的负担,因为索引也会消耗系统资源。以下是一些创建的依据
1·表的主键、外键必须有索引
2·数据量超过2000 行的表应该有索引
3·经常与其他表进行连接的表,在连接字段上需要索引
4·唯一性太差的字段不适合建立索引
5·更新频繁的字段不适合创建
6·经常出现在 where 子句中的字段,需要建立
7·应该建立选择性较高的字段上
8·可以在小字段上建立索引


索引详细信息表

显示参数 描述
Table 表的名称
Non_unique 索引值的唯一性,0表示唯一性,1表示非唯一性
Key_name 索引的名称
Seq_in_index 索引中的列序号,从1开始
Column_name 列名称

创建及查看索引

1·创建普通同索引,命令格式是:

create index 索引名字 on 表名(列名);

2·首先需要确保库中有表,表中有数据,这里为了实验效果,在之前就创建了一张表

mysql> select * from school;


技术分享图片


3·那么 以这张表中的 “ id ” 字段为所有,所有的名字是 id_index 所以普通索引为:

mysql> create index id_index on school(id);


4·查看你创建的索引格式

mysql> show index from school(表名)G;


技术分享图片


5·创建唯一性索引、并且查看,以下图为例:

mysql> create unique index unique_index on school(id);


技术分享图片


6·创建主键所有,它有两种方式,一种是创建表的同时就创建了主键,一种是创建表时没有指定主键,这里演示第二种,它的命令格式是:

mysql> alter table school add primary key(id);


技术分享图片


7·创建全文索引,只有在MyISAM 类型表是才有效,它可以建立在 TEXT、CHAR、VARCHAR类型字段中。这里只演示修改表类型时指定索引。

mysql> alter table school add fulltext(姓名);


技术分享图片


8·创建了索引,但是在不需要的时候需要删除,下面是演示删除索引
mysql> drop index id_index on school; -----(直接删除索引)
mysql> alter table school drop index unique_index; ----- (修改表时删除所有)
mysql>alter table school drop primary key; ----- (删除主键索引)


事务的概念及特点:

事务的概念

1·事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体以起向系统提交或撤销操作请求,通俗的来说就是这一组命令要么都执行,要么不执行。
2·事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。
3·事务适用于用户同时操作数据库系统的场景,比如:银行、保险公司、证券交易系统等,通过事务的整体性保证数据的一致性
4·事务是保持了一组操作的平稳性和可预测性的技术。


总结一下:你执行的一系列操作,要么完整的执行,要么完全不执行。一般情况下,操作顺利进行,最终操作成功。但是如果在这一系列过程中任何一个环节除了差错,数据库中的所有信息都必须保持在你开始操作前的状态。否则,数据库的信息将会一片混乱而不可预测。


事务的 四大特性

1·事务的原子性:事务时一个完整的操作,各个元素是不可分的。
2·事务的一致性:当完成时,数据必须处于一致状态;在事务开始之前,数据库中储存的数据处于一致状态;在正在进行的事务中,数据可能处于不一致的状态;当事务完成时,数据必须再次回到已知的一致状态
3·隔离性:对数据进行修改的所有并发事务时彼此隔离的,这表名事务必须时独立的,它不会以任何方式依赖于或影响其他事务。
4·持久性:不管系统是否发送了故障,事务处理的结果都是永久的。一旦事务被提交,事务的效果会被永久地保留在数据库中。


MySQL事务操作的两种方法
1·使用事务处理命令控制
2·使用set设置事务的处理方式


1·事务处理命令控制:
·begin :表示开始一个事务,后面会有多条数据库操作语句执行。
·commit:表示提交一个事务,对应前面的begin操作,他们之间的数据库操作语句以起完成
·rollback:表示回滚一个事务,在begin和commit之间,如果某一个数据库操作语句出现错误,执行rollback 回滚,数据库就会回到begin之前的状态,也就是操作语句都没执行。


事务处理命令控制举例:
1·事务提交范例:

mysql> begin; ----(事务开始)
mysql> insert into school values(8,‘王总‘,91,232,‘看书‘); ------(第一个插入)
Query OK, 1 row affected (0.00 sec) -----(提示正确执行)
mysql> insert into school values(7,‘小红‘,60,255,‘游戏‘); -------(第二个插入)
Query OK, 1 row affected (0.01 sec) --------(提示正确执行)
mysql> commit; -------------(提交事务)
Query OK, 0 rows affected (0.01 sec) -----------(正确执行)


技术分享图片


2·事务回滚范例

mysql> begin; -----(开始事务)
Query OK, 0 rows affected (0.00 sec)

mysql> insert into school values(9,‘王力宏‘,77,888,‘唱歌‘); ----(插入一条数据)
Query OK, 1 row affected (0.00 sec)

mysql> select * from school; -----(数据没有提交或回滚之前查看,结果如下图)


技术分享图片


mysql> rollback; -------(执行回滚命令)
Query OK, 0 rows affected (0.01 sec)

mysql> select * from school; ---------(再次查看表中信息,结果如下图)


技术分享图片


rollback 定义回滚点

·很多时候一个事务会包含很多条语句,而出现问题需要回滚时,不一定就直接回到起点,这样的话之前写的语句就全都白费了,那么这时候就要使用 savepoint 定义回滚点,这个回滚点就相当于 VMware 虚拟机中拍个快照,有这么一个意思。


savepoint 举例:
mysql> begin; ----(开始事务)
mysql> insert into school values(9,‘王力宏‘,77,888,‘唱歌‘); -----(插入一条语句)
mysql> savepoint s1; -----(定义一个回滚点)
mysql> insert into school values(10,‘那英‘,88,666,‘跳舞‘); -------(插入第二条语句)
mysql> savepoint s2; ---- (再定义一个回滚点)


使用rollback 回滚到指定的点
mysql> rollback to savepoint s1; --------(回滚到自己定义的一个点,如下图)
技术分享图片


总结:

1·数据库索引分为:普通索引、唯一索引、主键索引、全文索引、多列索引
2·数据库索引可以协助快速查询表中数据,但并不是任何字段都需要创建索引
3·数据库事务的四大特性:原子性、以执行、隔离性、持久性。
4·MySQL 事务命令有:begin、rollback、commit、savepoint。

以上是关于MySQL 索引 与 事务的主要内容,如果未能解决你的问题,请参考以下文章

MySQL索引与事务

MySQL索引与事务详解

MySQL 索引 与 事务

不要停!进一步了解mysql索引事务与存储引擎!

互联网行业中最常用的数据库——MySQL 索引事务与存储引擎

窥探MySQL索引与事务