網路上大部分的文章都是這麼說的:rr下面是不會發生幻讀的。
經過一番查證,我想說這個結果是錯誤的。
下面我來舉證說明:
--然後我們開啟2個事物,執行我們的sqlauto-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');
這裡奇怪的出現了 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條資料 為什麼出現幻讀 主要原因是快照讀和當前讀混合使用 ...