mysql是如何解決臟讀、不可重復讀、幻讀?


剛開始寫博客.. 寫的太low。

  1、數據庫的兩種讀,每種讀讀的數據版本不一樣,所以也稱為MVCC,即多版本並發控制

    a) 快照讀 

      select * from where xxx  這種形式的都是快照讀。

    b) 當前讀

      update , insert ,delete ,select xx from xx for update ,  in share mode 都是當前讀

      當前讀會等待,不會返回數據的歷史版本

  2、mvcc 的實現原理

    mvcc是基於read view、活躍事務列表 做的,以后的文章我會專門分析這塊。

  3、mysql 是如何解決臟讀、幻讀、不可重復讀的

    a) 在快照讀下是用的mvcc 做的 ,mysql RR 下 會產生幻讀!!  

      快照讀下數據的可見返回 = mvcc + 當前事務加鎖的行  

    b) 在當前讀使用 鎖

      加上鎖了,別的事務要修改只能等待,自然也就沒有各種問題了

  總結:innodb默認使用的mvcc + 鎖的混合模式。innodb的RR模式並沒有完全解決幻讀的問題。

       mvcc 和 鎖 都可以解決幻讀、重復讀問題。兩者方式不一樣,前者通過冗余數據,后者通過鎖。

 


免責聲明!

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



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