資料庫的四大特性:
1.原子性
2.一致性
3.隔離性
4.永續性
其中不考慮事務的隔離性會出現下面幾種情況:
(1)髒讀
在乙個事務處理過程裡讀取了另乙個未提交的事務中的資料。
當乙個事務正在多次修改某個資料,而在這個事務中這多次的修改都還未提交,這時乙個併發的事務來訪問該資料,就會造成兩個事務得到的資料不一致。
(2)不可重複讀
讀取了已提交的事務。事務a讀取資料後,事務執行更新操作,使a無法再現前一次讀取結果。不可重複讀包括三種情況:
a)事務a讀取某一資料後,事務b對其作了修改,當事務a再次讀取該事物時,得到與前一次不同的值。
b)事務a按一定條件從資料庫中讀取某資料記錄後,事務b刪除了其中部分記錄,當a再次按相同條件讀取資料時,發現某些記錄神秘的消失了。
c)事務a按一定條件從資料庫中讀取某資料記錄後,事務b插入了一些記錄,當a再次按相同條件讀取資料時,發現、多了一些記錄。
後兩種不可重複讀,也稱為幻影(phantom row)現象。
(3)丟失修改
兩個事物a與b,讀入同一資料並修改,b提交的結果破壞了a提交的結果,導致a的修改丟失。
(4)幻讀(由於設定事務隔離級別為:可重複讀,而導致)
同一事務中,雖然多次執行相同的查詢,查詢結果是相同的。但後面的查詢結果已經與db中真正的資料不一致了。在同一事務中多次讀取到的資料,不是真實的db中當前資料,是虛的資料,就像是db中資料的幻象。
事務的隔離級別:
1.serializable (序列化):可避免髒讀、不可重複讀、幻讀。
2.repeatable read (可重複讀):可避免髒讀、不可重複讀。
3.read committed (讀已提交):可避免髒讀。
4.read uncommitted (讀未提交):都避免不了
mysql預設的方式的:可重複讀。
七種傳播行為:
1.propagation_required:(支援事務)如果當前沒有事務,就建立乙個新事務,如果當前存在事務,就加入該事務,該設定是最常用的設定。
2.propagation_supports:(支援事務)支援當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就以非事務執行。
3.propagation_mandatory:(支援事務)支援當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就丟擲異常。
4.propagation_requires_new:(支援事務)建立新事務,無論當前存不存在事務,都建立新事務。
5.propagation_not_supported:(不支援事務)以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
6.propagation_never:(不支援事務)以非事務方式執行,如果當前存在事務,則丟擲異常。 7.
propagation_nested:(不支援事務)如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則執行與propagation_required類似的操作。
資料庫事務的四大特性以及隔離級別
本篇文章主要介紹資料庫事務的四大特性acid,以及資料庫的隔離級別。事務指的是滿足 acid 特性的一系列操作。在資料庫中,可以通過 commit提交乙個事務,也可以使用 rollback 進行回滾。原子性 atomicity 事務被視為不可分割的最小單元,要麼全部提交成功,要麼全部失敗回滾。一致性...
資料庫事務的四大特性以及事務的隔離級別
如果乙個資料庫聲稱支援事務的操作,那麼該資料庫必須要具備以下四個特性 acid atomic 原子性 原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾 consistency 一致性 一致性是指事務必須使資料庫從乙個一致性狀態變換到另乙個一致性狀態,也就是說乙個事務執行之前和執行之後都必須...
資料庫事務的四大特性以及事務的隔離級別
本篇講訴資料庫中事務的四大特性 acid 並且將會詳細地說明事務的隔離級別。如果乙個資料庫聲稱支援事務的操作,那麼該資料庫必須要具備以下四個特性 原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,這和前面兩篇部落格介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到資料庫,...