数据库mysql可重复读隔离级别下幻读测试
数据库mysql可重复读级别下幻读测试
幻读:同一个事务操作中,同样的读操作前后读取的结果不同,mysql在可重复读隔离级别下读第一次读取时的数据快照,解决了部分幻读
*********************************************
数据表test
*************************************
测试1:
事务1 | 事务2 | |
T1 | select * from test; | |
T2 | update test set age=12 where id=1; | |
T3 | select * from test; |
查询结果1:
查询结果2:
说明:事务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; |
第一次读取结果:
第二次读取结果:
说明:前后两次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; |
第一次读取结果:
第二次读取结果:
说明:事务1对id为1的记录age加一,原本结果应为21,但是由于事务2将age修改为12,所以age最终为13,出现写幻读