当前位置:   article > 正文

MySQL的四个事务隔离级别有哪些?各自存在哪些问题?_mysql事物的隔离级别

mysql事物的隔离级别

前言

大家应该都知道mysql的事务有四个隔离级别,但是他们分别是什么隔离级别并且会带来什么问题呢?接下来我为大家一一揭晓,通过图解的方式方便大家理解。

一、读未提交(Read Uncommitted)

1、这个是隔离级别最低的。

2、顾名思义,可以看出来就是一个事务可以读取另外一个未提交事务的修改。

3、存在的问题也最多,包含脏读、不可重复读、幻读。

4、因为存在问题最多,也是使用最少的隔离级别。

从图上可以看出来,事务1第一次查询的结果为18,当事务2修改过后事务在未提交的情况下,事务1再次查询的结果变为20

这个就是脏读,事务1读取到了事务2修改了但是还未提交的数据。

二、读已提交(Read Committed)

1、大多数的数据库的默认隔离级别,但是mysql的默认隔离级别不是这个。

2、顾名思义,可以看出来一个事务只能读取到已经提交事务的修改。

3、存在的问题,包含不可重复读、幻读。

4、因为它只能读取到已经提交事务的修改,所以解决了脏读的情况。

从图上可以看出来,事务1第一次读取的结果为18,当事务2修改完数据但是未提交事务的情况,事务1第二次读取的结果还是18,接着事务2提交事务,然后事务1第三次读取的结果变为20

这个就是不可重复读,事务1在前后两次查询的数据结果不一致,前面两次的结果为18,第三次的结果变为20

三、可重复读(Repeatable Read)

1、这个是mysql的默认隔离级别,对于InnoDB来说。

2、在同一个事务内,多次读取的结果都是一致的。

3、存在的问题,幻读。

4、这个级别解决了不可重复读的情况。

从图上可以看出来,虽然事务2完成了数据修改并且已经提交事务,但是在事务1的视角看前后两次读取的数据结果还是一致的都是18,这就解决了不可重复读的情况。

但是存在另外一个幻读的问题,事务1第一次读取id<10的时候数据有一条,接着事务2新插入了一条id=2的数据,然后事务1再次读取id<10的时候数据就有两条了。

四、串行化(Serializable)

1、这个是隔离级别的最高级。

2、通过对事务进行排序,使之串行执行,所以解决了上面说的脏读、不可重复读、幻读的情况。

3、但是因为是串行执行,事务只能一个接着一个执行,大大降低了并发性能,所以也是最影响性能的。

总结

本文主要介绍了MySQL的四个事务隔离级(读未提交、读已提交、可重复读、串行化),以及不同隔离级别存在的一些问题(脏读、不可重复读、幻读),还有可以通过什么隔离级别解决上述问题。

最后因本人能力有限可能有些地方讲的不对或讲错了,希望大家指出来好让我改进,还望大家多多包含,谢谢大家。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/924694
推荐阅读
相关标签
  

闽ICP备14008679号