MVCC
2022-11-21 14:39:49 9 举报
MVCC
作者其他创作
大纲/内容
两次查询结果一致,并没有读取到事务3更新的数据原因:事务3更新数据之后,trxid变为3,事务2只能查询trxid<=2的提交的数据验证:解决了不可重复读
MVCC(Multi-Version Concurrency Control)即多版本并发控制,Read_view(读快照)只能查找事务版本号小于等于当前事务版本号(trx_id)、删除版本号大于等于当前事务版本号(DB_ROLL_PRT)的行注意:每行数据都会有默认隐藏的三个字段:DB_ROW_ID(_rowid)-行id、DB_TRX_ID(trx_id)-递增的事务id、DB_ROLL_PRT-删除版本事务id1、_rowid查询方式:select _rowid from test2、trx_id查询方式:select trx_id from information_schema.INNODB_TRX where trx_mysql_thread_id=connection_id()
假设trx_id是3
假设trx_id是4
事务2开启事务创建快照begin;select * from test
假设trx_id是2
事务1
幻读场景
test_id
value
_rowid
trxid
rollid
1
AA
3
null
2
B
4
C
事务4
A
再次查询结果一致,并没有读取到事务3提交的数据原因:事务3新增数据的trxid变为3,事务2只能查询trxid<=2的提交的数据验证:解决了幻读
再次查询结果一致,并没有读取到事务4提交的数据原因:事务4删除数据rollid为4,事务2只能查询rollid>=2的提交的数据验证:解决了幻读
事务3开启事务更新数据begin;update test set value= 'AA' where test_id=1;commit;
事务2再次查询结果select * from test
事务3
假设trx_id是1
事务2
事务4开启事务删除数据begin;delete from test where test_id=2;commit;
不可重复读场景
0 条评论
下一页