MVCC
2024-08-09 10:21:20 0 举报
mysql的mvcc机制怎么解决事务隔离问题
作者其他创作
大纲/内容
2
trx_id
RR_前后的ReadViewcreator_trx_id:2min_trx_id:2max_trx_id:4第一访问到原始数据id=30第二次访问id=30以及id=31的数据,两次查询数据不一样,存在幻读
RR级别幻读——部分解决
ox000001
30
A30
A32
31
0x000001
RR_插入前后的ReadViewcreator_trx_id:3min_trx_id:2max_trx_id:4两次都访问的是原始数据,没有幻读发生
name
1
id
A31
3
32
用户表存在一条数据id :30name: A30age: 30现在有3个并发操作的事务,1个有两次查询的事务
roll_pointer
RC_查询1的ReadViewcreator_trx_id:5min_trx_id:3max_trx_id:6访问事务2数据
null
根据事务隔离属性可以知道:当在RC-提交读下:查询1查到事务2更新的数据,查询2查到事务3的数据在RR-可重复读下:查询1,查询2都只能查询到原始的数据MVCC怎么证明它?
0x000002
0x000003
时间点
事务2
事务3
事务4
事务5
T1
开启事务
T2
将age改为31
T3
commit
T4
将name改为A31
查询1
T5
T6
将age改为30
查询2
T7
RR下只在事务开启时生成一个ReadView
查询
插入数据id=5
update 插入的数据
4
插入数据
33
规则:1. trx_id == creator_trx_id 可以访问2. trx_id < min_trx_id 可以访问3. trx_id > max_trx_id 不可以访问4. min_trx_id <= trx_id <= max_trx_id 不可以访问
RR_查询1查询2的ReadViewcreator_trx_id:5min_trx_id:2max_trx_id:6访问原始数据
RC下每次查询生成一个ReadView
RC_查询2的ReadViewcreator_trx_id:5min_trx_id:4max_trx_id:6访问事务3数据
A33
age
规则:1. trx_id == creator_trx_id 可以访问2. trx_id < min_trx_id 可以访问3. trx_id > max_trx_id 不可以访问4. min_trx_id <= trx_id <= max_trx_id 不可以访问
用户表
0 条评论
下一页