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

本文汇总了Mysql事务、锁、隔离级别等相关知识点,分析了在共享锁、排他锁情形下,mysql利用MVCC多版本并发控制保证高并发性能。还探讨了事务隔离级别解决对应问题的方式,如RC、RR用一致性非锁定读解决问题,介绍了幻读的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

如RC如何解决不可重复读问题:【RC,RR都是用了一致性非锁定读来解决问题,但是读取的数据并不一样,图上有说明。这也是对应RC、RR解决对应问题的方式

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

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

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

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

具体解释:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值