MySQL幻讀解釋及案例演示

2021-10-23 07:24:54 字數 1408 閱讀 8083

幻讀: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 這就是不可重複讀。...