MySQL是如何根据undo log 链条实现read view机制的?谈谈看?

本文深入探讨MySQL如何在不同隔离级别下利用undo log实现read view机制,以Repeatable Read为例,详细解释了快照读的工作原理,以及在Read Committed隔离级别下的行为。通过实例分析事务并发操作中的数据一致性问题,并阐述MVCC在解决这些问题中的作用。

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

今天我要跟你分享的话题是:“MySQL是如何根据undo log 链条实现read view机制的?谈谈看”

一、事务的隔离级别与MVCC?

MySQL单进程多线程的数据库软件,在事务的并发操作中可能会出现脏读,不可重复读,幻读。

MySQL支持的四种事务隔离级别如下:

  • Read uncommited 简单来说就是:事务A可以读到事务B未commit的数据。这种情况也被叫做脏读。

  • Read commited 简单来说就是:事务A可以读到事务B已经commit的数据。

  • Serializable 在该级别下,写会加写锁、读会加读锁,除了读读不互斥,其他组合都互斥,因此可以保证事务串行化顺序执行,可以避免脏读、不可重复读与幻读。

  • Repeatable read 如下图:可重复读要求事务A两次 select 查询出来的结果是一样的,即使中间事务B将id=1的行给修改了,也要保证事务A再读取时,读到的结果也得和第一次读到的结果相同。

但是可重复读存在幻读读问题,比如事务A开启后按某个范围X读取一次(事务未提交),这时其他事务在该范围X内插入了新的数据,事务A再读时就会将新插入的数据读取出来,当然在MySQL的RR隔离级别下不会再出现这种幻行的问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值