MySQL中幻讀現象

2021-09-25 01:49:43 字數 849 閱讀 7876

幻讀:即由可重複讀隔離級別引發的事務問題,有些人說幻讀就是一次事務中讀取到的資料條數不一樣,我不太認可這句話,當然這句話並沒有什麼問題,但是由初學者來理解的話很容易進誤區!

幻讀場景1:

場景2:銀行a開啟了乙個事務視窗,查詢當前系統中有沒有"wangwu"使用者,發現沒有,銀行b也開啟了乙個事務視窗,查詢當前系統中也沒有"wangwu"使用者,銀行a先建立"wangwu"使用者並且提交,由於可重複讀取,銀行b在一次事務中必須保證查詢的資料一致性,因此查詢不到"wangwu",結果銀行b視窗認為wangwu沒有被註冊想註冊"wangwu"使用者,就建立"wangwu"使用者結果發現系統提示"wangwu"使用者已經被註冊",但是在本次事務中又查詢不到"wangwu",就好像出現幻覺一樣

測試:首先準備資料

create table user(

id int primary key,

username varchar(30),

money double

);insert into user values(1,'zhangsan',100);

insert into user values(2,'lisi',100);

開啟兩個mysql視窗

我們知道解決幻讀可以提高事務隔離級別為serializable (序列化),本章不做講解,只為演示mysql幻讀現象

mysql幻讀 mysql 幻讀

幻讀 phantom read 是指當使用者讀取某一範圍的資料行時,b事務在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的 幻影 行。innodb和falcon儲存引擎通 過多版本併發控制機制解決了幻讀問題。a事務讀取了b事務已經提交的新增資料,此時 a 還沒有提交,當前提交後,也...

mysql 並沒有幻讀 mysql幻讀

幻讀 phantom read 前提條件 innodb引擎,可重複讀隔離級別,使用當前讀時。表現 乙個事務 同乙個read view 在前後兩次查詢同一範圍的時候,後一次查詢看到了前一次查詢沒有看到的行。兩點需要說明 1 在可重複讀隔離級別下,普通查詢是快照讀,是不會看到別的事務插入的資料的,幻讀只...

MySQL幻讀問題

引入間隙鎖解決了幻讀的問題,跟間隙鎖存在衝突關係的,是 往這個間隙中插入乙個記錄 這個操作。間隙鎖之間都不存在衝突關係。間隙鎖和行鎖合稱 next key lock,每個 next key lock 是前開後閉區間。間隙鎖和 next key lock 的引入,幫我們解決了幻讀的問題,但同時也帶來了...