mysql 事務及其MVCC原理

2021-10-03 15:38:34 字數 1257 閱讀 2984

mysql事務分為四類 4種隔離級別

1.未提交讀 (read uncommitted/ru) ru

sessiona: a讀取b中update中未commit中的資料,讀到的*** 若此時b進行了rollback回滾操作。a中讀取到的值依然是b 修改後的這個值,

這就是所謂的髒讀

sessionb:update table set c=『***』 where ***

2.已提交讀 (rc) 不可重複讀 (mvcc多版本併發控制用到了此種隔離級別)

sessiona:a開啟事務 ,a可以讀取到b 每次update後的資料,照成不可重複讀取,每次修改都產生乙個新的資料多個版本

sessionb; 對資料進行修改操作並提交 (update 預設提交)

3.rr (可重複讀) mysql預設的隔離級別

容易出現幻讀。該隔離級別下,若b進行了insert或者delete操作,導致讀取的記錄資料不一致此種情況稱為 就是 幻讀

sessiona: 開始事務a 每次讀取的都是第一次未修改的資料

sessionb: 進行update 每次進行修改資料

4。序列化 (serializable)

讀和寫都上鎖。效率很低。

為了解決事務之間的併發問題有2種方式

1.讀寫上鎖。

2.mvcc多版本併發控制 一般用第二種

版本鏈:回滾段/

undo log:

**insert undo log 插入時產生的一種undo log 日期

update undo log 修改或刪除產生的一種undo log 日誌

上圖為版本鏈指標由最先的記錄指向之前資料的記錄(類似於git這樣版本控制,第一次 插入時回滾指標為null,以後每插入一條記錄事務id會增加)

對於ru級別來說:每次讀取最新的記錄就好

serializable :每次都上讀寫鎖來解決

只有在rc和rr 級別下需要版本鍊錶找到可見的事務id並判斷當前事務是否是需要的資料。每次讀取都會產生事務id。事務id形成鍊錶組成m_ids。根據當前事務id於m_ids比較大小 進行判斷是否是可見的

規則如下:

什麼時候產生事務id和什麼時候產生readview問題

mvcc原理 MySql事務以及MVCC機制與原理

事務 事務是一組原子性sql查詢語句,被當作乙個工作單元。若mysql對改事務單元內的所有sql語句都正常的執行完,則事務操作視為成功,所有的sql語句才對資料生效,若sql中任意不能執行或出錯則事務操作失敗,所有對資料的操作則無效 通過回滾恢復資料 事務有四個屬性原子性 事務被認為不可分的乙個工作...

mvcc原理 MVCC 原理

mvcc 原理 簡單說,讀了一條未提交的資料 乙個事務讀取了另外乙個事務修改後記錄 強調的是 update 和delete 只需要鎖住滿足條件的記錄即可 乙個事務讀取了另外乙個事務插入的資料,強調的是 insert 要鎖住滿足條件及相近的記錄。mysql 中預設的隔離級別是可重複讀,可解決髒讀和不可...

MySQL(十四) 事務 MVCC機制

事務的四大特性 atomicity 原子性 isolation 隔離性 consistency 一致性 和durability 永續性 重點說下隔離性,指的是多個事務並行執行時,效果上就像乙個乙個執行的。沒有因為是並行而導致問題。因為系統不可能完全讓事務順序執行,這樣效能太差,所以說需要在併發的同時...