MySQL幻讀問題

2021-10-23 21:24:30 字數 708 閱讀 3368

引入間隙鎖解決了幻讀的問題,跟間隙鎖存在衝突關係的,是「往這個間隙中插入乙個記錄」這個操作。間隙鎖之間都不存在衝突關係。

間隙鎖和行鎖合稱 next-key lock,每個 next-key lock 是前開後閉區間。

間隙鎖和 next-key lock 的引入,幫我們解決了幻讀的問題,但同時也帶來了一些「困擾」。

create table `t` (

`id` int(11

) not null,

`c` int(11

) default null,

`d` int(11

) default null,

primary key (`id`)

, key `c` (`c`)

) engine=innodb;

insert into t values(0

,0,0

),(5

,5,5

),(10

,10,10

),(15

,15,15

),(20

,20,20

),(25

,25,25

);

session a 鎖住的是(5,10),session b鎖住的也是(5,10),所以session a和session b 都阻塞了。

間隙鎖的引入導致了同樣的語句鎖住了更大的範圍。

mysql幻讀 mysql 幻讀

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

mysql 並沒有幻讀 mysql幻讀

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

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

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