今天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...