幻讀:t1讀取了乙個字段,t2對欄位進行了插入。此時t1再次讀取時仍然為原來的資料,不過t1如果對t2插入行同樣進行插入時就會報錯。
例項:實驗環境:mysql-5.6.43,事務自動提交進行關閉 set autocommit=0;
實驗流程:建立連個session,乙個進行事務一t1,乙個執行事務二t2。t2進行插入資料,t1進行測試幻讀結果。
1)#事務t1第一次檢視資料行
2)#事務二在131行進行插入
mysql> insert auto_test values(131,『huandu』);
query ok, 1 row affected (0.00 sec)
mysql> commit;
query ok, 0 rows affected (0.11 sec)
3)#事務t1第二次檢視資料行
可以看出儘管事務二插入了資料,事務一再進行檢視時兩者資料相同
但是4)事務t1對131行進行插入時就會發現
mysql> insert auto_test values(131,『false』);
error 1062 (23000): duplicate entry 『131』 for key 『primary』
由於id為主鍵提示不可對131行進行重複插入。
5)事務t1對131進行更新是會發現
mysql> update auto_test set name=『huandu update』 where id=131;
query ok, 1 row affected (0.00 sec)
rows matched: 1 changed: 1 warnings: 0
對事務t1進行提交並檢視會發現
資料插入並進行了更新。
6)幻讀與不可重讀:不可重複讀為t1未提交第一次讀取和t2對錶進行更新之後t1再次讀取的結果不一致。
幻讀:t1兩次讀取的結果一致,通過上例可以看出,但是在實際表中已經存在了t2插入的一條記錄。
mysql幻讀 mysql 幻讀
幻讀 phantom read 是指當使用者讀取某一範圍的資料行時,b事務在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的 幻影 行。innodb和falcon儲存引擎通 過多版本併發控制機制解決了幻讀問題。a事務讀取了b事務已經提交的新增資料,此時 a 還沒有提交,當前提交後,也...
mysql 並沒有幻讀 mysql幻讀
幻讀 phantom read 前提條件 innodb引擎,可重複讀隔離級別,使用當前讀時。表現 乙個事務 同乙個read view 在前後兩次查詢同一範圍的時候,後一次查詢看到了前一次查詢沒有看到的行。兩點需要說明 1 在可重複讀隔離級別下,普通查詢是快照讀,是不會看到別的事務插入的資料的,幻讀只...
mysql事務隔離級別幻讀的解釋
不可重複度和幻讀區別 不可重複讀的重點是修改,幻讀的重點在於新增或者刪除。例1 同樣的條件,你讀取過的資料,再次讀取出來發現值不一樣了 事務1中的a先生讀取自己的工資為 1000的操作還沒完成,事務2中的b先生就修改了a的工資為2000,導 致a再讀自己的工資時工資變為 2000 這就是不可重複讀。...