Skip to content

mvcc的readview的表述有一点错误。 #343

@atengya

Description

@atengya

位置:
图解mysql-事务篇-事务隔离级别是怎么实现的?-可重复读是如何工作的?

原文:
可重复读是如何工作的?
可重复读隔离级别是启动事务时生成一个 Read View,然后整个事务期间都在用这个 Read View。假设事务 A(事务 id 为51)启动后,紧接着事务 B(事务 id 为52)也启动了,那这两个事务创建的Read View如下:

问题:
经测试,这个readview并不是在启动事务的时候创建的,而是在第一次快照读的时候创建的。
例子如下

表结构
id age
1 18

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; # 临时设置为可重复读状态
可重复读状态
时刻 事务1
1 start transaction;
2
3 update test set age = 19 where id = 1;
4 commit;

时刻 事务2
1
2 start transaction;
3
4
5 select * from test where id = 1; # 这里查到的age为19, 说明readview是此刻建立的。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions