深入详解MYSQL的MVCC机制
参考资料:
参考视频(注意第二个视频关于幻读的讲解是错误的,详情见本文)
redoLog的结构详解
参考资料
学习内容:
1. MVCC要解决的问题
MVCC要解决的问题是,在不产生脏读等数据库问题的前提下,数据库的查询语句和更改语句不相互阻塞的情况;
在InnoDB中,MVCC仅仅存在于已提交读和可重复读两个隔离级别。
2. MVCC的实现机制
MVCC的实现完全依赖于undolog链表和ReadView两大板块
3. UndoLog链表
(1)InnoDB数据库中的每一行,都有三个隐藏字段
- 事务ID(DB_TRX」D):增删改都会默认开启事务,数据行每参与一次事务,就会更新改行的事务ID.
- 回滚指针():指向旧版本的数据
- Row_ID: 当InnoDB表没有规定主键,并且找不到非空列来构建聚簇索引,那么就会使用Row_ID作为改行的唯一标识,来构建聚簇索引
(2) Undo_Log的结构如下
数据库中的数据,在参与事务前(修改前),都会记录一个undo_log(包括原先的回滚指针和事务ID)
然后事务修改数据,并且更新隐藏的事务ID