MySQL事務隔離級別的實現原理

2021-10-08 05:34:09 字數 828 閱讀 4506

mvcc的全稱多版本併發控制,mvcc使得innodb的事務隔離級別下執行一致性讀操作有了保證。簡單說就是為了查詢一些正在被另乙個事務更新的行,並且可以看到它們被更新之前的值。這是乙個用來增強併發性的強大技術,可以使得查詢不用等待另乙個事務釋放鎖。

在innodb中,給每行增加兩個隱藏欄位來實現mvcc,乙個用來記錄資料行的建立事務版本號,另乙個用來記錄行的過期事務版本號。每開啟乙個新事務,事務的版本號就會遞增。

在乙個事務中,標準的select語句是不會加鎖,但是有兩種情況例外。select ... lock in share mode 和 select ... for update。

consistent read(一致性讀),innodb用多版本來提供查詢資料庫在某個時間點的快照。

如果隔離級別是repeatable read,那麼在同乙個事務中的所有一致性讀都讀的是事務中第乙個讀到的快照;如果是read committed,那麼乙個事務中的每乙個一致性讀都會讀到它自己重新整理的快照版本。

consistent read(一致性讀)是read committed和repeatable read隔離級別下普通select語句預設的模式。一致性讀不會給它鎖訪問的表加任何形式的鎖,因此其他事務可以同時併發的修改它們。

record locks(記錄鎖)在索引記錄上加鎖

gap locks(間隙鎖):在索引記錄之間加鎖,或者在第乙個索引記錄之前加鎖,或者在最後乙個索引記錄之後加鎖

next-key locks:在索引記錄上加鎖,並且在索引記錄之前的間隙加鎖。相當於record locks與gap locks的乙個結合

綜上所述,mysql的預設隔離級別的實現依賴於mvcc和鎖,也就是一致性讀和鎖。

MySQL事務隔離級別的實現原理

在mysql的眾多儲存引擎中,只有innodb支援事務,所有這裡說的事務隔離級別指的是innodb下的事務隔離級別。讀未提交 乙個事務可以讀取到另乙個事務未提交的修改。這會帶來髒讀 幻讀 不可重複讀問題。基本沒用 讀已提交 乙個事務只能讀取另乙個事務已經提交的修改。其避免了髒讀,但仍然存在不可重複讀...

MySQL事務隔離級別的實現原理

在mysql的眾多儲存引擎中,只有innodb支援事務,所有這裡說的事務隔離級別指的是innodb下的事務隔離級別。讀未提交 乙個事務可以讀取到另乙個事務未提交的修改。這會帶來髒讀 幻讀 不可重複讀問題。基本沒用 讀已提交 乙個事務只能讀取另乙個事務已經提交的修改。其避免了髒讀,但仍然存在不可重複讀...

mysql 事務隔離級別的實現原理

目錄 一 事務的四要素 acid 二 mysql的事務的隔離級別 三 多版本併發控制 multi version concurrency control 3.1 功能 3.2 原理 1.原子性 atomicity all done 或者 all not done 2.一致性 consistency ...