1. 首先,說說什麼事務(transaction)
事務,就是一組運算元據庫的動作集合。事務是現代資料庫理論中的核心概念之一。
如果一組處理步驟或者全部發生或者一步也不執行,我們稱該組處理步驟為乙個事務。
當所有的步驟像乙個操作一樣被完整地執行,我們稱該事務被提交。
由於其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾到最初的系統狀態。
2. spring七個事務傳播屬性:
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類似的操作。
備註:常用的兩個事務傳播屬性是1和4,即propagation_required,propagation_requires_new
3. 五個隔離級別:
isolation_default
這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別.
另外四個與jdbc的隔離級別相對應;
isolation_read_uncommitted
這是事務最低的隔離級別,它充許別外乙個事務可以看到這個事務未提交的資料。
這種隔離級別會產生髒讀,不可重複讀和幻像讀。
isolation_read_committed
保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事務未提交的資料。
這種事務隔離級別可以避免髒讀出現,但是可能會出現不可重複讀和幻像讀。
isolation_repeatable_read
這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。
它除了保證乙個事務不能讀取另乙個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)。
isolation_serializable
這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。
除了防止髒讀,不可重複讀外,還避免了幻像讀。
髒讀:指乙個事務讀取了乙個未提交事務的資料
不可重複讀:在乙個事務內讀取表中的某一行資料,多次讀取結果不同.乙個事務讀取到了另乙個事務提交後的資料.
虛讀(幻讀):在乙個事務內讀取了別的事務插入的資料,導致前後讀取不一致(insert)
spring事務隔離級別
在spring中定義了5中不同的事務隔離級別 1.isolation default 一般情況下使用這種配置既可 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別。2.isolation read uncommitted 4 p l.i f k...
Spring 事務隔離級別
資料庫事務的隔離級別有4種,由低到高分為為read uncomitted,read comitted,repeatable read serializable,而且,在事務的併發操作中可能會出現髒讀,不可重複度,虛讀 幻讀 髒讀 read uncomitted 什麼都防不住 乙個事務讀到另外乙個事務...
Spring事務隔離級別
事務操作可能出現的問題 更新丟失 lost update 當系統允許兩個事務同時更新同一資料時,發生更新丟失。髒讀 dirty read 當乙個事務讀取另乙個事務尚未提交的修改時,產生髒讀。非重複讀 nonrepeatable read 第一次讀 得到乙個結果 再讀,換了乙個結果 幻像 phanto...