innodb中幻讀與mvcc和間隙鎖分析

2021-07-30 08:41:04 字數 536 閱讀 5868

今天pptv電面的時候,與面試官在innodb中幻讀的解決到底是依賴間隙鎖還是mvcc產生了分歧。

雙方各執己見 。。。(事務隔離級別rr)面試官大大認為innodb就是靠mvcc解決的幻讀,而我固執的認為絕對是間隙鎖解決了這個問題。

面畢,查了一些資料,並且自己時間之後的分析和結論如下。

首先讀分為:

快照讀

select * from table where ?;

當前讀:特殊的讀操作,插入/更新/刪除操作,屬於當前讀,需要加鎖。

select * from table where ? lock in share mode;

select * from table where ? for update;

insert into table values (…);

update table set ? where ?;

delete from table where ?;

對於快照讀來說,幻讀的解決是依賴mvcc解決。而對於當前讀則依賴於gap-lock解決。

InnoDB的MVCC如何解決幻讀

innodb預設的隔離級別是rr 可重複讀 可以解決髒讀和不可重複讀,但是不能解決幻讀問題。什麼是幻讀?事務a讀取了乙個範圍內的資料,此時事務b在該範圍內插入了一條資料,並立馬提交了事務,此時事務a再次讀取這個範圍的資料時,發現多了一條,就好像幻覺一樣。什麼是mvcc?多版本併發控制。innodb為...

InnoDB解決幻讀方法和原理

首先說結論,在rr的隔離級別下,innodb使用mvcc和next key locks解決幻讀,mvcc解決的是普通讀 快照讀 的幻讀,next key locks解決的是當前讀情況下的幻讀。讀取歷史資料的方式,我們叫它快照讀 snapshot read 而讀取資料庫當前版本資料的方式,叫當前讀 c...

InnoDB怎麼解決幻讀的?

首先說結論,在rr的隔離級別下,innodb使用mvcc和next key locks解決幻讀,mvcc解決的是普通讀 快照讀 的幻讀,next key locks解決的是當前讀情況下的幻讀。事務a,先執行 update table set name hh where id 3 結果為 ok row...