spring事務的七種傳播屬性和五種隔離級別
事務定義
事務,就是一組操作資料庫的動作集合。事務是現代資料庫理論中的核心概念之一。如果一組處理步驟或者全部發生或者一步也不執行,我們稱該組處理步驟為一個事務。當所有的步驟像一個操作一樣被完整地執行,我們稱該事務被提交。由於其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾到最初的系統狀態。
事務特點
1.原子性:一個事務中所有對資料庫的操作是一個不可分割的操作序列,要麼全做要麼全不做
2.一致性:資料不會因為事務的執行而遭到破壞
3.隔離性:一個事物的執行,不受其他事務的干擾,即併發執行的事物之間互不干擾
4.永續性:一個事物一旦提交,它對資料庫的改變就是永久的。
七個事務傳播屬性
PROPAGATION_REQUIRED
-- 支援當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。PROPAGATION_SUPPORTS -- 支援當前事務,如果當前沒有事務,就以非事務方式執行。
PROPAGATION_MANDATORY -- 支援當前事務,如果當前沒有事務,就丟擲異常。
PROPAGATION_REQUIRES_NEW -- 新建事務,如果當前存在事務,把當前事務掛起。
PROPAGATION_NOT_SUPPORTED -- 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
PROPAGATION_NEVER -- 以非事務方式執行,如果當前存在事務,則丟擲異常。
PROPAGATION_NESTED--如果當前存在事務,則在巢狀事務內執行。如果當前沒有事務,則進行與PROPAGATION_REQUIRED類似的操作。
五種隔離級別
隔離級別是指若干個併發的事務之間的隔離程度。
ISOLATION_DEFAULT--這是一個PlatfromTransactionManager預設的隔離級別,使用資料庫預設的事務隔離級別.另外四個與JDBC的隔離級別相對應;
ISOLATION_READ_UNCOMMITTED--這是事務最低的隔離級別,它充許別外一個事務可以看到這個事務未提交的資料。這種隔離級別會產生髒讀,不可重複讀和幻像讀。
ISOLATION_READ_COMMITTED
ISOLATION_REPEATABLE_READ--這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。它除了保證一個事務不能讀取另一個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)。
ISOLATION_SERIALIZABLE--這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。除了防止髒讀,不可重複讀外,還避免了幻像讀。
關鍵詞
1)幻讀:事務1讀取記錄時事務2增加了記錄並提交,事務1再次讀取時可以看到事務2新增的記錄;2)不可重複讀取:事務1讀取記錄時,事務2更新了記錄並提交,事務1再次讀取時可以看到事務2修改後的記錄;
3)髒讀:事務1更新了記錄,但沒有提交,事務2讀取了更新後的行,然後事務T1回滾,現在T2讀取無效。