Innodb中的快照讀和當前讀


一、前言

上篇文章記錄了 對MVCC的相關理解,其中有提到快照讀。其實在MVCC並發控制中,讀操作可以分為兩類:快照讀(snapshot read)和當前讀(current read)
 

二、什么是快照讀和當前讀

  • 快照讀:讀取的是記錄的可見版本(有可能是歷史版本),不加鎖。
其實就是簡單的select 操作。形如:select * from table where ?。 但還跟事務隔離級別有關。
 
  • 當前讀:讀取的是記錄的最新版本,並且當前讀返回的記錄都會加上鎖,保證其他事務不會再並發修改這條記錄。
其實就是特殊的讀操作,比如插入、更新、刪除屬於當前讀,需要加鎖的也屬於當前讀。如下:
select * from table where ? lock in share mode -- 共享鎖 (這里可能不同版本的mysql對應命令不一樣)
select * from table where ? for update -- 排他鎖
insert into table values(?)
update table set ? where ?
delete from table where ?
 
 

三、快照讀的實現

 

四、當前讀的實現

主要靠加鎖(行記錄鎖+間隙鎖)實現,保證其他事務不會再並發修改這條記錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM