1. 程式人生 > 其它 >【mysql】事務隔離與mvcc的誤區

【mysql】事務隔離與mvcc的誤區

技術標籤:Java誤區陷阱

文章目錄

問題

我們知道 mysql的InnoDB的事務隔離機制是通過mvcc實現的,比如在可重複讀模式下,
開啟一個事務,那麼當前事務的操作的記錄會增加一個事務id,通過事務id進行可重複讀的實現,那麼存在一個誤區:當前的事務是什麼時候真正開始的?

答案:begin語法不會立即開啟一個事務,而是到真正執行語句時,才會真正建立

驗證

  1. 我們現在存在一個課程表:

select * from course;
在這裡插入圖片描述

2.我們開啟一個事務A,但暫不執行任何語句:

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

3.我們在另一個事務B修改資料並提交:
語文改為語文01
在這裡插入圖片描述
4. 在事務A中,首次執行查詢語句:

在這裡插入圖片描述
發現查詢結果是最新值,說明begin沒有真正開啟事務,只有第一條語句開始執行時,才會觸發事務;如果begin開始事務的話,那麼查詢結果應該是語文,而不是語文01