前言:
大家都知道mysql有四大特性,原子性,一致性,隔离性,持久性,其中隔离性又有四个级别,分别是读未提交,读已提交(RC),可重复读(RR),串行化,然后mysql 的隔离性是如何解决掉的呢,带着疑问,大家一起来找答案。
1、什么是MVCC
在mysql InnoDB 存储引擎下,RC、RR是基于MVCC进行并发事务控制的,MVCC 是基于“数据版本”对并发事务进行访问。
2、实例展现
RR(可重复读):Select1=张三 Select2=张三
RC(读已提交):Select1=张三 Select2=张小三 可见RC出现了不可重复读
那么RR是怎么保证可重复读的呢,下面说。
3、MVCC基于UNDO_LOG(回滚日志) 版本链
undo_log 版本链的数据不在引用后才会被删除,不用担心数据丢失问题
以上四个事务会有如下的版本链,通过链的方式保存数据的版本变化
可以看到多出两个字段:TRX_ID(事务ID) 和DB_ROLL_PTR(指针,指向上一个版本变化的数据)
4、ReadView
4.1 什么是快照读 什么是当前读
快照读就是最普通的Select查询sql语句
<