MVCC
2022-11-21 14:39:49   10  举报             
     
         
 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 条评论
 下一页
  
   
   
   
  
  
  
  
  
  
  
  
 