mysql事務的實現方式——mvvc+鎖


1.什么是mvvc

條件:

1.1只有在InnoDB引擎下存在的一種基於多版本的並發控制協議;

1.2MVCC只在 READ COMMITTED 和 REPEATABLE READ 兩個隔離級別下工作。其他兩個隔離級別夠和MVCC不兼容,因為 READ UNCOMMITTED 總是讀取最新的數據行,而不是符合當前事務版本的數據行。而 SERIALIZABLE 則會對所有讀取的行都加鎖

好處:讀不加鎖,讀寫不沖突

2.mvvc的實現機制

2.1InnoDB在每行數據都增加三個隱藏字段,一個唯一行號,一個記錄創建的版本號,一個記錄刪除的版本號。

 

 

 創建版本號:insert操作時事務的id

 刪除版本號:insert時為null,刪除時為當前事務的id

當讀操作時,讀取的是刪除版本號為null,或者創建版本號最大的數據,保證我們讀取的是最新的數據

2.2 undo-log日志:undo log是為回滾而用,具體內容就是copy事務前的數據庫內容(行)到undo buffer,在適合的時間把undo buffer中的內容刷新到磁盤

 


免責聲明!

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



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