数据库mysql可重复读级别下幻读测试
数据库幻读
幻读:同一个事务操作中,同样的读操作前后读取的结果不同
读幻读:mysql在可重复读隔离级别下读第一次读取时的数据快照,解决了读幻读
写幻读:mysql在可重复读隔离级别下存在写幻读
数据表基本信息
读幻读测试
事务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的影响
写幻读测试
事务1 | 事务2 | |
T1 | select * from test; | |
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,出现写幻读