1. 程式人生 > 其它 >Mysql到底解決了幻讀沒有(rr級別)?

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的人有三個了,名字都是無敵。幻讀出現了