什么是事務、事務特性、事務隔離級別、spring事務傳播特性
事務傳播:
| 傳播種類 | 介紹 |
|---|---|
| 1.PROPAGATION_REQUIRED(需要 requierd): | 如果當前有事務就支持當前事務,如果沒有就創(chuàng)建事務。 |
| 2.PROPAGATION_SUPPORTS(支持 supports): | 如果當前有事務就支持當前事務,如果沒有就非事務執(zhí)行。 |
| 3.PROPAGAETION_MANDATORY(強制 mandatory): | 如果當前有事務就支持當前事務,如果沒有就拋出異常。 |
| 4.PROPAGAETION_NOT_SUPPORED(不支持 not_suppored): | 總是非事務執(zhí)行,如果當前有事務則掛起這個事務。 |
| 5.PROPAGATION_NEVER(永不 never): | 總是非事務執(zhí)行,如果有任何活動的事務就拋出異常。 |
| 6.PROPAGATION_REQUIRED_NEW(需要,新 required_new): | 總是開啟新的事務,如果已經(jīng)存在就掛起這個事務。 |
| 7.PROPAGATION_NESTED(嵌套 nested): | 如果當前有事務就,在運行在嵌入事務,如果沒有就按照REQUIED去創(chuàng)建事務。 |

1.什么是事務:
事務是程序中一系列嚴密的操作,所有操作執(zhí)行必須成功完成,否則在每個操作所做的更改將會被撤銷,這也是事務的原子性(要么成功,要么失?。?/p>
2.事務特性:
事務特性分為四個:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持續(xù)性(Durability)簡稱ACID。
原子性(Atomicity):事務是數(shù)據(jù)庫邏輯工作單元,事務中包含的操作要么都執(zhí)行成功,要么都執(zhí)行失敗。
一致性(Consistency):事務執(zhí)行的結果必須是使數(shù)據(jù)庫數(shù)據(jù)從一個一致性狀態(tài)變到另外一種一致性狀態(tài)。當事務執(zhí)行成功后就說數(shù)據(jù)庫處于一致性狀態(tài)。如果在執(zhí)行過程中發(fā)生錯誤,這些未完成事務對數(shù)據(jù)庫所做的修改有一部分已寫入物理數(shù)據(jù)庫,這是數(shù)據(jù)庫就處于不一致狀態(tài)。
隔離性(Isolation):一個事務的執(zhí)行過程中不能影響到其他事務的執(zhí)行,即一個事務內(nèi)部的操作及使用的數(shù)據(jù)對其他事務是隔離的,并發(fā)執(zhí)行各個事務之間無不干擾。
持續(xù)性(Durability):即一個事務執(zhí)一旦提交,它對數(shù)據(jù)庫數(shù)據(jù)的改變是永久性的。之后的其它操作不應該對其執(zhí)行結果有任何影響。

3.事務的隔離級別:
事務的隔離級別也分為四種,由低到高依次分別為:read uncommited(讀未提交)、read commited(讀提交)、read repeatable(讀重復)、serializable(序列化),這四個級別可以逐個解決臟讀、不可重復讀、幻讀這幾類問題。

- read uncommited:是最低的事務隔離級別,它允許另外一個事務可以看到這個事務未提交的數(shù)據(jù)。
- read commited:保證一個事物提交后才能被另外一個事務讀取。另外一個事務不能讀取該事物未提交的數(shù)據(jù)。
- repeatable read:這種事務隔離級別可以防止臟讀,不可重復讀。但是可能會出現(xiàn)幻象讀。它除了保證一個事務不能被另外一個事務讀取未提交的數(shù)據(jù)之外還避免了以下情況產(chǎn)生(不可重復讀)。
- serializable:這是花費最高代價但最可靠的事務隔離級別。事務被處理為順序執(zhí)行。除了防止臟讀,不可重復讀之外,還避免了幻象讀。
- 臟讀、不可重復讀、幻象讀概念說明:
- 臟讀:指當一個事務正字訪問數(shù)據(jù),并且對數(shù)據(jù)進行了修改,而這種數(shù)據(jù)還沒有提交到數(shù)據(jù)庫中,這時,另外一個事務也訪問這個數(shù)據(jù),然后使用了這個數(shù)據(jù)。因為這個數(shù)據(jù)還沒有提交那么另外一個事務讀取到的這個數(shù)據(jù)我們稱之為臟數(shù)據(jù)。依據(jù)臟數(shù)據(jù)所做的操作肯能是不正確的。
- 不可重復讀:指在一個事務內(nèi),多次讀同一數(shù)據(jù)。在這個事務還沒有執(zhí)行結束,另外一個事務也訪問該同一數(shù)據(jù),那么在第一個事務中的兩次讀取數(shù)據(jù)之間,由于第二個事務的修改第一個事務兩次讀到的數(shù)據(jù)可能是不一樣的,這樣就發(fā)生了在一個事物內(nèi)兩次連續(xù)讀到的數(shù)據(jù)是不一樣的,這種情況被稱為是不可重復讀。
- 幻象讀:一個事務先后讀取一個范圍的記錄,但兩次讀取的紀錄數(shù)不同,我們稱之為幻象讀(兩次執(zhí)行同一條 select 語句會出現(xiàn)不同的結果,第二次讀會增加一數(shù)據(jù)行,并沒有說這兩次執(zhí)行是在同一個事務中)