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為插入一行新記錄,保存當前系統版本號作為行版本號,同時保存當前系統版本號到原來的行作為行刪除標識。