mysql官网解读之InnoDB Transaction Model

MVCC

在mysql中会有多版本控制,在rr事务级别,同一秒读到的数据是一样的,即使其他事务进行相关操作也不会影响,除非西西~

在这里插入图片描述
在rc级别是可以读取到已经修改的数据的。

使用READ COMMITTED隔离级别,事务中的每个一致读取都会设置并读取其自己的新快照。使用时LOCK IN SHARE MODE,将发生锁定读取:A SELECT阻塞直到包含最新行的事务结束(请参见 第14.7.2.4节“锁定读取”)。

14.7.2.1事务隔离级别

InnoDB报价由SQL描述的所有四个事务隔离级别:1992标准: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ,和 SERIALIZABLE。默认隔离级别InnoDB是 REPEATABLE READ。

在这里插入图片描述
rr级别

  1. 上面我们可以看到,rr级别mvcc机制下,同一个事务多次读取的数据都是一样的。
  2. 在update,delete的时候,如果没有命中唯一索引,会去锁一个范围。所以一般在操作频繁的sql要加上索引。

在这里插入图片描述

rc级别

rc跟rr的区别:上图也说明了,rc级别没有加间隙锁,也就是gap。会导致幻读,也就是你读完一个范围的数据之后,别人修改这个范围的数据,你再次去读,会读到不同的数据。产生幻读。

  1. update级别没有命中唯一索引,也是会锁一定范围,但是会释放没有不匹配的行,这样就减少了死锁的可行性。
  2. rc级别会读到别人更新的数据

读未提交跟串行读比较鸡肋就不看了。

参考的官方文档

14.7.2.1事务隔离级别

发布了212 篇原创文章 · 获赞 30 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/weixin_38336658/article/details/103716994