数据库mysql可重复读隔离级别下幻读测试


数据库mysql可重复读级别下幻读测试

 

幻读:同一个事务操作中,同样的读操作前后读取的结果不同,mysql在可重复读隔离级别下读第一次读取时的数据快照,解决了部分幻读

 

*********************************************

数据表test

 

         数据库mysql可重复读隔离级别下幻读测试

 

*************************************

测试1:

 

  事务1 事务2
T1 select * from test;  
T2    update test set age=12 where id=1;
T3 select * from test;  

 

查询结果1:

         数据库mysql可重复读隔离级别下幻读测试

查询结果2:

      数据库mysql可重复读隔离级别下幻读测试

说明:事务1在前后两次的读取结果一致,第二次读读的是第一次读取数据时的快照

 

*************************************

测试2:

 

  事务1 事务2
T1 select * from test;  
T2   update test set age=12 where id=1;
T3 update test set age=12 where id=2;  
T4 SELECT * from test;  

第一次读取结果:

      数据库mysql可重复读隔离级别下幻读测试

第二次读取结果:

      数据库mysql可重复读隔离级别下幻读测试

说明:前后两次id为1的行记录读取的结果相同,不受事务2的影响

 

*************************************

测试3:

 

  事务1 事务2
T1 select sleep(4);  
T2   update test set age=12 where id=1;
T3 update test set age=age+1 where id=1;  
T4 SELECT * from test;  

第一次读取结果:

      数据库mysql可重复读隔离级别下幻读测试

第二次读取结果:

     数据库mysql可重复读隔离级别下幻读测试

说明:事务1对id为1的记录age加一,原本结果应为21,但是由于事务2将age修改为12,所以age最终为13,出现写幻读