mysql幻讀 mysql 幻讀

2021-10-19 19:27:35 字數 1356 閱讀 4402

幻讀(phantom read) 是指當使用者讀取某一範圍的資料行時,b事務在該範圍內插入了新行,當使用者再讀取該範圍的資料行時,會發現有新的「幻影」行。innodb和falcon儲存引擎通 過多版本併發控制機制解決了幻讀問題。

a事務讀取了b事務已經提交的新增資料,此時 a 還沒有提交,當前提交後,也就看到了

a事務mysql> select * from test;

| a | b |

| 14 | 14 |

| 16 | 16 |

| 10 | 20 |

| 31 | 31 |

| 33 | 33 |

| 38 | 38 |

| 50 | 60 |

| 70 | 70 |

8 rows in set (0.00 sec)

事務bmysql> insert into test (a,b) values(80,80);

query ok, 1 row affected (0.00 sec)

事務amysql> select * from test;

| a | b |

| 14 | 14 |

| 16 | 16 |

| 10 | 20 |

| 31 | 31 |

| 33 | 33 |

| 38 | 38 |

| 50 | 60 |

| 70 | 70 |

8 rows in set (0.00 sec)

事務bmysql> commit;

query ok, 0 rows affected (0.01 sec)

事務a 此時若不commit,是看不到事務b insert的資料的

mysql> select * from test;

| a | b |

| 14 | 14 |

| 16 | 16 |

| 10 | 20 |

| 31 | 31 |

| 33 | 33 |

| 38 | 38 |

| 50 | 60 |

| 70 | 70 |

8 rows in set (0.00 sec)

commit;

mysql> select * from test;

| a | b |

| 14 | 14 |

| 16 | 16 |

| 10 | 20 |

| 31 | 31 |

| 33 | 33 |

| 38 | 38 |

| 50 | 60 |

| 70 | 70 |

| 80 | 80 |

9 rows in set (0.00 sec)

mysql 並沒有幻讀 mysql幻讀

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

MySQL幻讀問題

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

事務隔離髒讀幻讀 mysql

先說什麼叫做 事務隔離 事務隔離是指多個事務同時在進行中 如果只有乙個事務,那就無所謂隔離不隔離了 時,各個事務被隔離開來,相互之間的影響和事物的隔離級別有關,按照 讀未提交 讀已提交 可重複讀 序列化 的順序,越往後面隔離級別越高,事務之間的影響越小。下面的內容都以這個資料表為例進行說明 idmo...