【數據庫】悲觀鎖與樂觀鎖與MySQL的MVCC實現簡述


悲觀鎖

悲觀鎖,就是一種悲觀心態的鎖,每次訪問數據時都會鎖定數據:

樂觀鎖

樂觀鎖,就是一種樂觀心態的鎖,每次訪問數據時並不鎖定數據,期待數據並沒作修改,如果數據沒被修改則作具體的業務

應用程序上使用樂觀鎖的思想

MySQL的MVCC實現

多版本並發控制,MVCCMulti Version Concurrent Control,用於實現非鎖定的讀操作。
MySQL的InnoDB的可重復讀隔離級別中是通過在每條記錄中加創建版本刪除版本兩列來實現,這兩列的值是事務的版本號。

  • Insert操作,創建版本為當前事務ID
  • Delete操作,刪除版本為當前事務ID
  • Update操作,原記錄的刪除版本為當前事務ID,新增一條更新后的記錄的創建版本為當前事務ID
    數據的樣式大概如下圖:

如果需要查詢某個事務版本的數據,邏輯如下SQL(只是用SQL表示此邏輯以便理解,內部並非這樣實現):

select * from table where 創建版本 <= 當前版本 and (刪除版本 is null or 刪除版本 > 當前版本);

問題:可重復讀中MVCC如何保證第1次查詢和第2次查詢的一致性?


免責聲明!

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



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