Mysql RR下的幻讀問題

2022-01-25 11:56:49 字數 612 閱讀 4640

網路上大部分的文章都是這麼說的:rr下面是不會發生幻讀的。

經過一番查證,我想說這個結果是錯誤的。

下面我來舉證說明:

--

auto-generated definition

create

table

test

( c1

intauto_increment

primary

key,

c2 varchar(10) default

''not

null

, c3

varchar(10) default

''not

null

);insert

into cread.test (c1, c2, c3) values (1, '

2', '

3');

然後我們開啟2個事物,執行我們的sql 

這裡奇怪的出現了 1行資料被影響了。

在事務2裡,c2欄位兩次查詢出現不同的結果。也就是幻讀。

MySQL幻讀問題

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

什麼是幻讀,幻讀會有什麼問題

幻讀指的是乙個事務在前後兩次查詢同乙個範圍的時候,後一次查詢看到了前一次查詢沒有看到的行。幻讀 做乙個說明 在可重複讀隔離級別下,普通的查詢是快照讀,是不會看到別的事務插入的資料的。因此,幻讀在當前讀下才會出現。第二次檢視,發現被修改的 行 不能稱為幻讀,幻讀僅專指 新插入的行 當前讀 也叫即時讀,...

幻讀以及幻讀的解決方案

事務a 事務b事務a按照特定的條件查詢資料,查詢到了2條資料 事務b插入一條資料 commit 事務a按照原條件查詢資料,查詢到還是2條資料 事務a修改其中一條資料的值update,看到修改的範圍是3條資料 事務a按照原條件查詢資料,查詢到3條資料 為什麼出現幻讀 主要原因是快照讀和當前讀混合使用 ...