10.MySQL --- MVCC机制

本文详细解释了MVCC(多版本并发控制)在MySQLInnoDB中的应用,包括其如何通过快照读实现无锁并发、与CopyOnWrite的关联,以及如何解决幻读问题。重点介绍了MVCC的工作原理和在事务隔离中的作用。

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

MVCC是什么

MVCC (Multiversion Concurrency Control),多版本并发控制。

MVCC是通过数据行的多个版本管理来实现数据库的并发控制的。

MVCC使得在InnoDB的事务隔离级别下执行一致性读操作有了保证,换句话说,就是为了查询一些正在被另一个事务更新的行,并且可以看到他们被更新之前的值,这样在做查询的时候就不需要等待另外一个事务释放行锁

快照读和当前读

MVCC在MySQL InnoDB中的实现主要是为了提高数据库的并发性能,用更好的方式去处理读写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读,而这个读指的就是快照读而非当前读。当前读实际上是一种加锁的操作,是悲观锁的实现,而MVCC是乐观锁

我将MVCC与CopyOnWrite做比较,在java中底层就是写时复制技术,我觉得两者是互通的。

MVCC的实现原理

其实本质就是Undo log链

在这里插入图片描述

MVCC如何解决幻读问题

MVCC默认就是解决了不可重复读和幻读的问题的,MVCC有个ReadView,对应的就是undo log版本链,用户线程进来查询的那条记录,如果有人要进行修改,则会将修改后的内容引一个指针出来指向旧的数据,这样用户线程读取的一直都是之前的那个版本的数据,自然也就解决了不可重复读和幻读的问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值