【发布时间】:2020-11-27 08:32:25
【问题描述】:
MySQL 版本:5.7.29 Homebrew
引擎=InnoDB
可重复阅读
MVCC 快照问题:
表:
CREATE TABLE `r` (
`id` int NOT NULL primary key auto_increment,
`v` int not null
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into r values (1,1);
步骤:
-----事务A -------------|交易B
--------------------------------|----------------- ----------
------开始;-----------------| --
1、select * from r;-------------| --
--------------------------------|开始;
--------------------------------|更新 r 设置 v=v+1 其中 id = 1;
--------------------------------|提交;
2、select * from r;-------------| --
更新 r 设置 v=v+1 其中 id = 1;| --
3、select * from r;-------------| --
----------提交;----------------| --
第 1 步和第 2 步 v = 1,但为什么第 3 步 v = 3,因为 MVCC 我认为 v 应该是 2。请帮帮我。
【问题讨论】:
-
我猜是因为插入和更新操作是当前读取?当前红色表示总是获取最新值。但是我怀疑这个插入操作是否对事务中的其他操作有影响?