1.undo log版本链
每一行数据都有两个隐藏字段 一个是trx_id(事务ID),一个是roll_pointer(指向执行事务之前的undo log中的旧值),那么在undo log中会形成一个版本链
2.readview机制
m_ids--记录生成readview的时候此刻还未提交的trx_id(事务ID)
min_trx_id--m_ids中的最小值
max_trx_id--是mysql下一个要生成的事务ID,最大事务ID.就是m_ids中最大的下一个
creator_trx_id--自己的事务ID
3.基于readview实现RC
每次读的时候都会创建readview,所以第二次读的时候如果B事务提交了那么就不会在m_ids中出现,自然而然就会可见了
4.基于readview实现RR以及解决幻读
事务A开始知道事务最终提交之间中的每一次查询都只会生成一个readview
所以只会读到少于min_trx_id的值和自己修改的值,所以既可以重复读又可以解决幻读
幻读的概念:在查询中由于中间被别的事务插入了数据,导致第一次和第二次查到的数据条数不一致