資料庫事務特性和隔離級別

2021-09-03 02:25:40 字數 1877 閱讀 7920

一、事務的基本要素(acid)

1、原子性(atomicity):事務開始後所有操作,要麼全部做完,要麼全部不做,

不可能停滯在中間環節。事務執行過程中出錯,會回滾到事務開始前的狀態,

所有的操作就像沒有發生一樣。也就是說事務是乙個不可分割的整體,

就像化學中學過的原子,是物質構成的基本單位。

2、一致性(consistency):事務開始前和結束後,資料庫的完整性約束沒有被破壞 。

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

3、隔離性(isolation):同一時間,只允許乙個事務請求同一資料,不同的事務之間

彼此沒有任何干擾。

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

4、永續性(durability):事務完成後,事務對資料庫的所有更新將被儲存到資料庫,不能回滾。

二、事務的併發問題

1、髒讀:事務a讀取了事務b更新的資料,然後b回滾操作,那麼a讀取到的資料是髒資料

2、不可重複讀:事務 a 多次讀取同一資料,事務 b 在事務a多次讀取的過程中,

對資料作了更新並提交,導致事務a多次讀取同一資料時,結果 不一致。

3、幻讀:系統管理員a將資料庫中所有學生的成績從具體分數改為abcde等級,

但是系統管理員b就在這個時候插入了一條具體分數的記錄,當系統管理員a改結束後

發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。

小結:不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。

解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

隔離級別:

未提交讀(read uncommitted):在未提交讀級別,事務中的修改,即使沒有提交,

對其他事務也都是可見的。事務可以讀取未提交的資料,這也被稱為髒讀(dirty read)。

這個級別會導致很多問題,從效能上來說,未提交讀不會比其他的級別好太多,

但是缺乏其他級別的很多好處,在實際應用中一般很少使用。 

提交讀(read committed)(不可重複讀):大多數資料庫系統的預設隔離級別都是提交讀

(但mysql不是)。提交讀滿足前面提到的隔離性的簡單定義:乙個事務開始時,只能「看見」

已經提交的事務所做的修改。換句話說,乙個事務從開始直到提交之前,所做的任何修改對

其他事務都是不可見的。這個級別有時候也叫做不可重複讀(nonrepeatable read),

因為 兩次執行同樣的查詢,可能會得到不一樣的結果。 

可重複讀(repeatable read):可重複讀解決了髒讀的問題。該級別保證了在同乙個事務中

多次讀取同樣記錄的結果是一致的。但是理論上,可重複讀隔離級別還是無法解決另外乙個幻讀

(phantom read)問題。所謂幻讀,指的是當某個事務在讀取某個範圍內的記錄時,另外乙個

事務中又在該範圍插入了新的記錄,當之前的事務再次讀取該範圍的記錄時,會產生幻行(phantom row)。

可重複讀是mysql的預設事務隔離級別。 

可序列化(serializable):可序列化是最高的隔離級別。它通過強制事務序列執行,

避免了前面所說的幻讀問題。簡單來說,可序列化會在讀取的每一行資料上都加上鎖,

所以可能導致大量的超時和鎖爭用問題。實際應用中也很少用到這個隔離級別,

只有在非常需要確保資料的一致性而且可以接受沒有併發的情況下,才考慮用該級別。

事務隔離級別

髒讀不可重複讀

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

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

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

是序列化(serializable)否否

否參考:

來自 <

來自 <>

資料庫事務特性和隔離級別

資料庫事務是資料庫管理系統執行過程中的乙個邏輯單位,有乙個有限的資料庫操作序列完成。以 a賬戶向b賬戶匯錢 為例,乙個事務是下面乙個操作序列 a.從a賬號中把餘額讀出來。b.對a賬號做減法操作。c.把結果寫回a賬號中。d.從b賬號中把餘額讀出來。e.對b賬號做加法操作。f.把結果寫回b賬號中。事務有...

資料庫事務特性和隔離級別

一組業務操作,要麼全部成功,要麼全部不成功。原子性 乙個事務是乙個整體,不可分割,事務中的操作要麼都成功,要麼都失敗。一致性 事務必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。事務執行前後,資料庫的狀態是一致的。例如 a有1000,元,b有1000元,加起來是2000,中間執行轉賬的操作,轉賬...

資料庫事務的特性和隔離級別

acid的事務特性 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 原子性就是要麼成功要麼失敗。一致性就是比如存款總額不變。從乙個一致性狀態轉移到另乙個一致性狀態。事務之間不可以相互影響。事務在提交之前是不被其他事務可見的。事務完...