事務的四種隔離級別

2021-09-27 21:33:24 字數 1097 閱讀 8846

資料庫事務的隔離級別有4種,由低到高分別為read uncommitted 、read committed 、repeatable read 、serializable 。

在事務的併發操作中可能會出現髒讀,不可重複讀,幻讀。具體可參照該篇部落格

read uncommitted

讀未提交,即乙個事務可以讀取到另乙個未提交的事務

舉例:轉賬事務

取款事務

1開始事務

2開始事務

3查新賬戶餘額為2000

4取款1000元,餘額改為1000

5查詢賬戶餘額為1000(髒讀)

6取款發生錯誤,事務回滾,餘額變為2000

7轉入2000,餘額變為3000(1000+2000)

8提交事務

備註正常邏輯此時賬戶為4000元

那怎麼解決髒讀呢?read committed!讀提交,能解決髒讀問題。

read committed

讀提交,顧名思義,就是乙個事務要等另乙個事務提交後才能讀取資料

舉個例子:

事務a事務b

1開始事務

2第一次查詢,小明為20歲

3開始事務

4其他操作

5更改小明年齡為25

6提交事務

7第二次查詢,小明年齡為25

備註兩次讀取到資料不一致

那怎麼解決可能的不可重複讀問題?repeatable read !

repeatable read

重複讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作

舉個例子:

事務a事務b

1開始事務

2第一次查詢,資料總量為100條

3開始事務

4其他操作

5增加100條資料

6提交事務

7第二次查詢,資料總量為200條

備註兩次讀取到資料總量不一致

那怎麼解決幻讀問題?serializable!

serializable

即序列化。serializable 是最高的事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀、不可重複讀與幻讀。但是這種事務隔離級別效率低下,比較耗資料庫效能,一般不使用。

事務四種隔離級別

1.讀取未提交 乙個事務可以讀取另乙個未提交的事務的資料。髒讀 2.讀取已提交 事務a多次讀取同一資料,事務b在事務a多次讀取的過程中,對資料做了更新並提交,導致事務a多次讀取同一資料時,結果不一致。不可重複度 對應update操作 3.可重複讀 開始讀取資料時 事務開啟時 不在允許修改操作。可能會...

四種事務的隔離級別

sql 標準定義的四個隔離級別為 read uncommitted 未提交讀 read committed 提交讀 repeatable read 可重複讀 serializable 可序列化 下面分別介紹。1 未提交讀 就是乙個事務可以讀取另乙個未提交事務的資料。1 開啟乙個客戶端a,並設定當前事...

事務的四種隔離級別

事務的四種隔離級別 1.read uncommitted 讀未提交,存在髒讀,不可重複讀,幻讀問題 2.read committed 讀已提交,解決了髒讀,存在不可重複讀,幻讀問題 3.repeatable read 可重複讀,解決了髒讀,不可重複讀,存在幻讀問題,是mysql預設隔離級別,使用mm...