关于mysql事务和隔离级别以及并发控制问题原理解析

最近在碰到和Mysql事务、锁、隔离级别等相关的知识点,这里作一个汇总,主要是分析mysql在有共享锁,排他锁的情形下,是如何保证其高并发性能(主要利用了存储引擎的MVCC多版本并发控制),下面列出作具体说明

参考链接:一致性非锁定读与一致性锁定读(易于理解);MYSQL一致性非锁定读和锁定读理解 MySQL 一致性非锁定读原理漫谈MySql中的事务(非常易懂)

另外,还有一个问题,就是关于事务隔离级别是怎么解决对应问题的。

如RC如何解决不可重复读问题:

利用的是快照的一致性非锁定读(快照是MVCC协议一种常见的实现方式,MVCC的最大好处:读不加锁,读写不冲突)。注意:快照技术本身只做到了读一致,避免了读异常的发生,却没有对写进行限制

参考:数据库MVCC如何解决可重复读问题

从MVCC协议来区分不可重复读与幻读(说明不可重复读和幻读的区别)

(这篇文章对幻读的解释我是比较认可的,和我之前写的那篇文章的观点一致(文章地址:针对mysql的RR级别的幻读问题的分析与理解),就是不可重复读主要是update,delete问题,幻读说的是insert)

具体解释:

幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作
更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。

最后一篇关于MVCC的说明,也是知乎上提到的文章(作为科普了解知道吧,文章有点长):MySQL InnoDB MVCC 机制的原理及实现

猜你喜欢

转载自blog.csdn.net/jayxujia123/article/details/111881168