【mysql】事務隔離與mvcc的誤區
阿新 • • 發佈:2021-02-03
文章目錄
問題
我們知道 mysql的InnoDB的事務隔離機制是通過mvcc實現的,比如在可重複讀模式下,
開啟一個事務,那麼當前事務的操作的記錄會增加一個事務id,通過事務id進行可重複讀的實現,那麼存在一個誤區:當前的事務是什麼時候真正開始的?
答案:begin語法不會立即開啟一個事務,而是到真正執行語句時,才會真正建立
驗證
- 我們現在存在一個課程表:
select * from course;
2.我們開啟一個事務A,但暫不執行任何語句:
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
3.我們在另一個事務B修改資料並提交:
語文改為語文01
4. 在事務A中,首次執行查詢語句:
發現查詢結果是最新值,說明begin沒有真正開啟事務,只有第一條語句開始執行時,才會觸發事務;如果begin開始事務的話,那麼查詢結果應該是語文,而不是語文01