MySQL MVCC机制
multi-version concurrent control,多版本并发控制,专门控制多个事务并发运行的时候,互相影响产生的问题
1.undo log版本链
每条数据都有两个隐藏字段,一个是trx_id,一个是roll_pointer,trx_id就是最近一次更新这条数据的事务id,roll_pointer就是指向了更新这个事务之前生成的undo log
2.ReadView
执行一个事务的时候,会生成一个ReadView,它里面有四个东西比较关键
- m_ids:此时有哪些事务在MySQL里还没提交
- min_trx_id:m_ids里最小的值
- max_trx_id:MySQL下一个要生成的事务id
- creator_trx_id:当前事务id
MySQL基于undo log版本链和ReadView机制来实现MVCC,简单来说就是只操作不大于当前事务id的数据,如果查到数据大于当前事务id,就通过undo log版本链找到小于或等于当前事务id的版本