沫言|解读数据库:深入分析MySQL中事务以及MVCC的实现原理( 五 )
select * from test where 事务id<=2-- 因为当前的事务id为2
4、假如这时候事务D又来了 , 把id=1的数据给删除了 , 这时候会把原数据的回滚指针记录为当前的事务id:4 , 所以此时数据如下:
5、回到事务B , 继续查询 , 应该还是只有1和2两条数据 , 那么他可能是这么查询的:
select * from test where 事务id<=2 and (回滚指针 is null or 回滚指针 >2)
6、假如这时候又来了事务E , 对第2条数据进行了更新 , 这时候会生产一条事务id为5的数据 , 并把原数据的回滚指针也同时标记为当前的事务id:5 , 那么会得到如下数据:
根据上面猜测 , 执行下面的查询:
select * from test where 事务id<=2 and (回滚指针 is null or 回滚指针 >2)
这时候发现 , 查出来的数据还是只有1和2两条 。
MVCC查询两大规则综上 , MVCC大致查询规则如下:1、只查询事务id小于等于当前事务id的数据 。 (这里要等于是因为假如自己的事务插入了一条数据 , 会生成一条当前事务id的数据 , 所以必须包含本事务自己插入的数据)2、只查询未删除(回滚指针为空)或者回滚指针大于当前事务id的数据 。 (这里不能等于是因为假如自己的事务删除了一条数据 , 会生成数据的回滚指针为当前事务id , 所以必须排除掉自己删除的数据)
当然 , 上面规则只是简化了 , 实际查询远比这里复杂 , 只是希望借助这种简单化的概念可以帮助大家更好的理解MVCC工作机制 。
作者:双子孤狼
【沫言|解读数据库:深入分析MySQL中事务以及MVCC的实现原理】原文链接:
推荐阅读
- 中国青年报客户端|【青声视语】数据解读:中国经济加快复苏引外媒点赞
- 人民网-环保频道|专家科普解读之二:“限塑”之后,我可以用什么?
- 律师解读公司扔员工证:属公然侮辱他人,情节严重可给予拘留
- 【青声视语】数据解读:中国经济加快复苏引外媒点赞
- 李霄鹏|盘点鲁能冠军主帅,分析李霄鹏差在哪里,解读鲁能绝无可能换帅
- 专家科普解读之二:“限塑”之后,我可以用什么?
- 刘超顺说历史|而是国君诛权臣,解读赵氏孤儿案:不是奸臣害忠良
- 新华社|门诊共济是自己的"钱"给别人用了吗?权威解读来了
- 医保|医保门诊改革是拿个人的“钱”补统筹基金的窟窿吗?权威解读来了
- 上汽|上汽集团“老大难”| 半年报解读