Mysql到底解决了幻读没有(rr级别)?
1、答:从严格意义上说没有解决。
2、具体分析:
2.1、根据读取数据方式,可以分为快照读和当前读,在快照读方式下,mysql通过mvcc方式解决了幻读,
在当前读方式下比如 select * from xxx where name='aa' for update 由于mysql 开启间隙锁,会锁住
相关数据,所以此时也可以说解决了幻读问题。
2.2、当一个事务中设计到 update 一条看不见的数据时,如果此时再次查询时,可能多出一条数据,此时,也是发生了
幻读。所以从严格意义说mysql并没有解决幻读。
举例一下:
id | name | age |
1 | 小明 | 18 |
2 | 小李 | 18 |
3 | 小东 | 19 |
4 | 赵四 | 20 |
事务1: select * from student where age=18 for update 此时小明小李被查出
事务2:insert into student (name,age) values(小张,18)
事务1:update student set name=‘无敌’ where age=18 ; select * from student where age=18
注意此时age=18的人有三个了,名字都是无敌。幻读出现了