Mysql面试话术

简述一下Mysql MVCC

MVCC意为多版本并发控制,是保障事务的一种机制,在Mysql中可以解决不可重复读的问题。

不可重复读

不可重复读是数据库三种事务问题的一种,他的表现为当两个事务交替进行时,A事务对查询出一条结果集时,B事务对上面一条结果集进行了更新,A事务再次查询时发现了结果不对。出现这个问题是由A事务读取到了B事务更新而导致的。如果要防止这个Mysql事务问题,我们可以将Mysql 的事务隔离级别开启到RR(可重复读)。

MVCC技术原理

当事务第一次进行读操作的时候,会建立一个快照读数据,之后的数据操作都发生了这个快照读当中。多个事务之间如果要互相访问的话,需要满足一定的条件。这个条件大致可以分为三个,可以看见在本事务开启前的就提交的事务,无法看见作对本事务而言被定义为活跃事务的数据,无法看见在本事务之后开启事务的数据。

MVCC能够解决不可重读,但没有办法解决脏读

理论上使用MVCC多版本控制就能够解决数据变更导致的问题,因为其他在本事务开启后的新事物都被算到事务版本链的后继节点,不会被当前事务所看到了。但存储一种特殊情况,如果多个事务都对同一行数据做了更新,例如:A事务在原本数据上加了500,B事务在原本数据上加了500,这种情况下无法感知的话,最终的数据没有加上1000而是加上了500,显然违反了事物的一致性。所以在先读而后写的原则下,MVCC没有进行所谓的唯一一次快照,而是会再次建立快照。那在这样的情况,就出现了幻读的问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值