MySQL进阶之路(十二)——事务的4种隔离级别分别是什么

MySQL进阶之路(十二)——事务的4种隔离级别分别是什么

一、概述

​ 在上一篇文章中给大家详细介绍了多个事务并发执行的场景下出现脏写脏读不可重复读幻读的原因,本篇文章将会给大家详细介绍MySQL为了防止上述情况的发生分别是如何去做的

​ 回顾之前所学的,事务具有ACID四种特性,其中 I 指的是事务的隔离性,对于隔离性,又有不同的隔离级别,不同的隔离级别本质上其实是在事务同时进行更改或查询操作时在结果的性能、可靠性、一致性和可再现性之间所作的取舍不同而已。

​ InnoDB支持的隔离级别有:SERIALIZABLEREPEATABLE READREAD COMMITTEDREAD UNCOMMITTED,对于的中文意思分别是:可串行化可重复度读已提交读未提交。InnoDB默认的隔离级别是REPEATABLE READ。下面我们对这几个事务逐个进项分析

二、READ UNCOMMITTED(读未提交)

​ 在这种隔离级别下,事务可以读到其他事物还没有提交的值,在这种情况下不会发生脏写,因为两个未提交的事务不可能会读取到同一行数据的值,其中一个事务读到的是另一个事物未提交的值。

​ 在这种隔离级别之下,肯定会发生脏读,不可重复度以及幻读

​ 这种隔离级别仅仅适用于只进行查询操作的场景,因此,该隔离级别可以说是基本上没多少地方会用到

三、READ COMMITTED(读已提交)

​ 该隔离级别之下,事务只能读取到其他事物以及提交的数据,对于未提交的脏数据是读取不到的,因此不会发生脏写和脏读、但是会发生不可重复度和幻读。

​ 原因很简单,本事物执行多次的读操纵,读到的可能都是已经提交并且不相同的数据,因此会发生不可重复度,发生幻读的原因也很简单,你进行范围查询的时候,其他事物插入新的数据并且提交。

四、REPEATABLE READ(可重复读)

​ 顾名思义,在一个事物提交之前对同一个数据进行多次的查询,每次查询到的值都是一样的,即便在此期间有其他事物对该数据进行了修改并且已经提交也不会影响。这也是InnoDB引擎默认的隔离级别

​ 在这种情况下不会发生脏读、脏写和不可重复读。可能会发生幻读,因为虽然可以重复的读取到相同的值,但是不能避免在进行范围查询时读取到不同数量的值。

五、SERIALIZABLE(可串行化)

​ 这个隔离级别就比较简单粗暴了,在此隔离级别之下,所有事物只能串行的进行,不能并发的执行,在这隔离级别之下,脏写、脏读、不可重复读和幻读都不会发生,但是缺点很明显,性能极其的差!因此这种隔离级别在平时工作中几乎是用不到的

六、小结

​ 上述的隔离界别其实都有他们的简称,比如RU、RC、RR,其中最重要的就是RC和RR了,而RU和SERIALIZABLE因为几乎用不到,所以不用太过于去关注。

​ 之后的文章,将会给大家详细地去介绍,上述的几种隔离级别的实现原理。如果本篇文章有讲的不对的地方,欢迎指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命中有太多不确定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值