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的人有三个了,名字都是无敌。幻读出现了

posted @ 2021-08-06 11:31  0o飞行天下o0  阅读(554)  评论(2编辑  收藏  举报