1. 程式人生 > >資料庫的四大特性以及事務的隔離級別,七種傳播行為

資料庫的四大特性以及事務的隔離級別,七種傳播行為

資料庫的四大特性:

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類似的操作。