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中的內容刷新到磁盤

