Mysql到底解決了幻讀沒有(rr級別)?
阿新 • • 發佈:2021-08-06
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的人有三個了,名字都是無敵。幻讀出現了