清晰理解Mysql的四種事務隔離級別

2021-09-19 12:48:33 字數 2204 閱讀 9645

基礎知識:

事務的基本要素 :acid

a:atomicity(原子性)

事務開始後所有操作,要麼全部做完,要麼全部不做,不可能停滯在中間環節

c:consistency(一致性)

a向b轉賬,不可能a扣了錢,b卻沒收到

i:isolation(隔離性)

a正在從一張銀行卡中取錢,在a取錢的過程結束前,b不能向這張卡轉賬

d:durability(永續性)

事務完成後,事務對資料庫的所有更新將被儲存到資料庫,不能回滾

事務隔離級別

髒讀不可重複讀

幻讀讀未提交(read-uncommitted)是是

是不可重複讀(read-committed)否是

是可重複讀(repeatable-read)否否

是序列化(serializable)否否

讀未提交(read-uncommitted):

a、b兩個客戶端,a查詢表a中,小王的卡上餘額為100元,這時候,b對金額進行修改,改為200,但是b還沒有提交事務,a再次查詢,查到的是200元,這種在沒提交事務的時候查詢出的資料為臟資料;(b有可能為誤操作,進行回滾)

不可重複讀(read-committed):

a、b兩個客戶端,a查詢表a中,小王的卡上餘額為100元,這時候,b對金額進行修改,改為200,但是b還沒有提交事務,a再次查詢,查到的確實是100元(因為b沒有提交),在b提交時候後,a再次查詢,為200元;a的這兩次查詢結果的不一致,就叫做不可重複讀

可重複讀(repeatable-read):

a、b兩個客戶端,a查詢表a中,小王的卡上餘額為100元,這時候,b對金額進行修改,改為200,但是b還沒有提交事務,a再次查詢,查到的確實是100元(因為b沒有提交),在b提交時候後,a再次查詢,仍然為100元;a的這兩次查詢結果一致,解決了不可重複讀的問題。不過如果a對小王的餘額執行更新語句,讓卡上餘額多500,那麼再次查詢後,餘額就為700了(500+200)

注意:可重複讀的隔離級別下使用了mvcc機制,select操作不會更新版本號,是快照讀(歷史版本);insert、update和delete會更新版本號,是當前讀(當前版本)

序列化(serializable):

a、b兩個客戶端,a查詢表a中,小王的卡上餘額為100元,這時候,b對金額進行修改,改為200,執行的時候報錯,因為這種隔離級別會鎖表

在這種情況下,只允許乙個事務在執行,其它事務必須等待這個事務執行完後才能執行。沒有併發,只是單純的序列。

附;a:atomicity(原子性)

整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾(rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

c:consistency(一致性)

乙個事務可以封裝狀態改變(除非它是乙個唯讀的)。事務必須始終保持系統處於一致的狀態,不管在任何給定的時間併發事務有多少。

也就是說:如果事務是併發多個,系統也必須如同序列事務一樣操作。其主要特徵是保護性和不變性(preserving an invariant),以轉賬案例為例,假設有五個賬戶,每個賬戶餘額是100元,那麼五個賬戶總額是500元,如果在這個5個賬戶之間同時發生多個轉賬,無論併發多少個,比如在a與b賬戶之間轉賬5元,在c與d賬戶之間轉賬10元,在b與e之間轉賬15元,五個賬戶總額也應該還是500元,這就是保護性和不變性。

i:isolation(隔離性)

隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,執行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。這種屬性有時稱為序列化,為了防止事務操作間的混淆,必須序列化或序列化請求,使得在同一時間僅有乙個請求用於同一資料。

d:durability(永續性)

在事務完成以後,該事務對資料庫所作的更改便持久的儲存在資料庫之中,並不會被回滾。

MySQL的四種事務隔離

sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因...

mysql4種事務 Mysql事務四種隔離級別

首先可查詢mysql自動提交狀態 select autocommit 結果如下 autocommit 1 可通過命令將資料庫事務修改為不自動提交 set autocommit 0 mysql四種事務隔離級別 1.讀未提交 read uncommitted 也叫髒讀 助記骯髒 設定事務隔離級別為 讀未...

真正理解MySQL的四種事務隔離級別

事務具有四個特徵 原子性 atomicity 一致性 consistency 隔離性 isolation 和持續性 durability 這四個特性簡稱為 acid 特性。原子性 事務是資料庫的邏輯工作單位,事務中包含的各操作要麼都做,要麼都不做。一致性 事務執行的結果必須是使資料庫從乙個一致性狀態...