简单地说,Mysql的InnoDB存储引擎的可重复读隔离级别解决了不可重复读问题,同时在一定程度上解决了幻读,这一切都归功于多版本并发控制机制,即我们平时说的MVCC(Mutil-Version Concurrency Control)
,而MVCC
的实现又依托于Undo log chain
和ReadView
.
1、Undo log Chain
当InnoDB为我们存储一行数据的时候会额外再添加3个字段:
6个字节的
DB_TRX_ID
7个字节的
DB_ROLL_PTR
6个字节的
DB_ROW_ID
这里不关心最后一个DB_ROW_ID
,假设我们有张只有一个字段c1的空表,现在往该表插入一条数据10,插入成功之后,该行数据如下:
10表示的是c1的值,3表示的是DB_TRX_ID
的值,即当时插入该条数据的事务ID,null表示的是DB_ROLL_PTR
的值,即指向Undo log的指针&#x