【MySQL】MySQL是如何實現可重復讀的?


1、可重復讀

可重復讀(REPEATABLE READ)是MySQL的默認隔離級別,具體是指在同一事務中多次讀取的數據是一致的。

2、如何實現

MySQL是使用多版本並發控制(MVCC,Mutil-Version Concurrency Control)實現的。

在InnoDB中,是通過在每行記錄后面保存兩個隱藏的列來實現的。這兩個列,一個保存了行的創建時間,一個保存行的刪除時間。存儲的時間值實際是系統版本號(system version number)。每開始一個新的事務,系統版本號都會自動遞增。事務開始時刻的系統版本號會作為事務的版本號,用來和查詢到的每行記錄的版本號進行比較。在可重復讀隔離級別下,MVCC的具體操作如下:

SELECT:
  • a. 只查詢版本早於當前事務版本的數據行。
  • b. 行的刪除版本要么 未定義,要么大於當前事務的版本號。這可以確保事務讀取到的行,在事務開始之前未被刪除。
INSERT:

​ InnoDB為新插入的每一行保存當前系統版本號作為行版本號。

DELETE:

​ InnoDB為刪除的每一行保存當前系統版本號作為行刪除標識。

UPDATE:

​ InnoDB為插入一行新記錄,保存當前系統版本號作為行版本號,同時保存當前系統版本號到原來的行作為行刪除標識。


免責聲明!

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



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