文章目录
- 1.MVCC多版本并发控制基本概念
- 2.MVCC实现原理
- 2.1 innodb引擎的表结构中的三个隐藏字段
- 2.2 innodb引擎的undo log日志
- 2.3 innodb引擎的readview
- 2.4 MVCC实现原理小结
1.MVCC多版本并发控制基本概念
快照读、当前读、MVCC的介绍。
快照读,select不加锁,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。
快照读演示:
当前读就是读取到最新的版本记录,读取时还要保证其他事务不能修改当前记录,会对读取的记录进行加锁。
当前读演示:
2.MVCC实现原理
2.1 innodb引擎的表结构中的三个隐藏字段
在innodb引擎的表结构当中存在三个或两个隐藏字段,有没有DB_ROW_ID取决于表有没有指定主键。
如何查看隐藏字段?可直接从表结构中查看。
cd /var/lib/mysql
cd itcast/
下面的ibd文件都是独立表空间文件
ibd2sdi stu.ibd
2.2 innodb引擎的undo log日志
undo log 版本链
每次修改操作完成后,会在undo log日志中留下一条记录。当有一连串的事务进行操作时,在undo log日志当中就会生成一条记录版本的版本链。
当我们查询的时候,具体要返回哪一个版本呢??
2.3 innodb引擎的readview
版本数据链访问规则:
RC读已提交的隔离情况下,在进行快照读的时候,MVCC在数据读取的时候具体的底层原理:
RR隔离级别下,仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView。(可重复读)