mysql資料庫隔離級別實現原理

2021-10-17 23:15:49 字數 1028 閱讀 1153

待完善…

read_uncommited 的原理:

事務對當前被讀取的資料不加鎖;

事務在更新某資料的瞬間(就是發生更新的瞬間),必須先對其加 行級共享鎖,直到事務結束才釋放。

表現:事務1讀取某行記錄時,事務2也能對這行記錄進行讀取、更新;當事務2對該記錄進行更新時,事務1再次讀取該記錄,能讀到事務2對該記錄的修改版本,即使該修改尚未被提交。

事務1更新某行記錄時,事務2不能對這行記錄做更新,直到事務1結束。

read_commited 的原理:

事務對當前被讀取的資料加 行級共享鎖(當讀到時才加鎖),一旦讀完該行,立即釋放該行級共享鎖;

事務在更新某資料的瞬間(就是發生更新的瞬間),必須先對其加 行級排他鎖,直到事務結束才釋放。

表現:事務1讀取某行記錄時,事務2也能對這行記錄進行讀取、更新;當事務2對該記錄進行更新時,事務1再次讀取該記錄,讀到的只能是事務2對其更新前的版本,要不就是事務2提交後的版本。

事務1更新某行記錄時,事務2不能對這行記錄做更新,直到事務1結束。

repeatable read 的原理:

事務在讀取某資料的瞬間(就是開始讀取的瞬間),必須先對其加 行級共享鎖,直到事務結束才釋放;

事務在更新某資料的瞬間(就是發生更新的瞬間),必須先對其加 行級排他鎖,直到事務結束才釋放。

表現:事務1讀取某行記錄時,事務2也能對這行記錄進行讀取、更新;當事務2對該記錄進行更新時,事務1再次讀取該記錄,讀到的仍然是第一次讀取的那個版本。

事務1更新某行記錄時,事務2不能對這行記錄做更新,直到事務1結束。

serializable 的原理:

事務在讀取資料時,必須先對其加 表級共享鎖 ,直到事務結束才釋放;

事務在更新資料時,必須先對其加 表級排他鎖 ,直到事務結束才釋放。

表現:事務1正在讀取a表中的記錄時,則事務2也能讀取a表,但不能對a表做更新、新增、刪除,直到事務1結束。

事務1正在更新a表中的記錄時,則事務2不能讀取a表的任意記錄,更不可能對a表做更新、新增、刪除,直到事務1結束。toc](這裡寫自定義目錄標題)

mysql資料庫隔離級別

事務的隔離級別 由高到低 1.序列化 serializable 乙個事務乙個事務的執行 2.可重複讀 repeatable read 可重複讀,無論其他事務是否修改並提交了資料,在這個事務中看到的資料值始終不受其他事務影響 mysql資料庫所預設的級別 3.讀已提交 read committed 讀...

mysql 細說 資料庫隔離級別 及實現

網上大多數關於隔離級別的文章都是講了事務中的問題以及隔離級別可以解決的問題,我這次想看看資料庫底層是如何實現隔離級別的。不過還是先來回顧一下隔離級別以及可能發生的問題。1.髒讀 指的是乙個事務的讀操作讀到了另乙個未提交的事務修改的值。比如下面的場景 髒讀的問題是,讀到的值可能會被回滾,那麼這個值就是...

MySQL資料庫的隔離級別

問題 innodb 如果乙個session a開啟事務讀一條資料,另乙個session b開啟事務更新這條資料,那麼b能夠順序提交嗎?a又讀到的是什麼值呢?mysql預設情況下,答案為 b可以立即更改這個記錄,但是a始終都讀的是b修改前的資料,即使b已經提交了。a只有提交了之後,再select,就看...