MySQL 学习笔记(二)MVCC 机制

本文详细介绍了MySQL的MVCC(多版本并发控制)机制,旨在解决事务并发读问题,包括脏读、不可重复读和虚读。MVCC通过记录的隐藏字段、undo日志和ReadView来实现。在读已提交(RC)级别,MVCC能防止脏读,而在可重复读(RR)级别,通过固定ReadView避免不可重复读。然而,MVCC无法解决当前读的虚读问题,需要通过加锁来确保数据一致性。
摘要由CSDN通过智能技术生成

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475
之前在讲 MySQL 事务隔离性提到过,对于写操作给读操作的影响这种情形下发生的脏读、不可重复读、虚读问题。是通过MVCC 机制来进行解决的,那么MVCC到底是如何实现的,其内部原理是怎样的呢?我们要抓住三个方面:记录中的4个隐藏字段、undo log 和 read view。

一、MVCC 定义和解决的读问题

1. 事务并发一致性的读问题

脏读(Dirty Read)

脏读也就是当前事务读取到了其他事务还未提交的数据。我们举个例子来看看:

Time session A session B
1 -设置当前会话事务隔离级别为:读未提交 set session transaction isolation level read uncommitted;
2 -设置当前会话事务隔离级别为:读未提交 set session transaction isolation level read uncommitted;
3 start transaction; select * from account;
4 start transaction; select * from account; update account set user_name = '孙七' where id = 6;
5 select * from account; 查询到了session B 中还没有提交的数据
不可重复读(Non-Repeatable Read)

不可重复读是两次读取的结果不相同,和脏读的区别就是不可重复读读到了其他事务提交后的数据。

举个实例来看看:

Time session A session B
1 -设置当前会话事务隔离级别为:读已提交 set session transaction isolation level read committed;
2 -设置当前会话事务隔离级别为:读已提交 set session transaction isolation level read committed;
3 start transaction; select * from account;
4 start transaction; select * from account; update account set user_name='赵赵' where id = 1; -此时已经发生修改 select * from account;
5 select * from account;
6 commit;
7
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

[虚幻私塾】

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值