首页 > Web开发 > 详细

数据无法修改?解密MVCC原理

时间:2020-06-29 11:36:01      阅读:77      评论:0      收藏:0      [点我收藏+]

问题

事务隔离级别是可重复读,表结构如下:

CREATE TABLE `t` (
    `id` int(11) NOT NULL,
    `c` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB;
insert into t(id, c) values(1,1),(2,2),(3,3),(4,4);

什么场景会出现下面修改失效的问题?

技术分享图片

场景

对于下面的两个并发事务,就会出现上面的问题。

技术分享图片

原因

B更新表t之后,会将表t上所有记录的trx_id修改为B的trx_id,而A在执行update的时候数据已经被B修改了,条件不满足,update失败。然后执行select,这时表t中所有记录的trx_id都是B的,相对于A的ReadView来说,B属于未来事务,所以A看不到,查出来的还是事务开始时的数据。

ReadView多版本的判断可以参考:ReadView介绍

数据无法修改?解密MVCC原理

原文:https://www.cnblogs.com/jmliao/p/13207058.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!