事務和事務隔離級別,Spring事務傳播和隔離級別

2021-09-11 23:09:48 字數 1854 閱讀 9366

一、事務有四大特性,也即原子性(atomicity),一致性(consistency),隔離性(isolation),永續性(durability)

1、原子性

即不可分割,事務要麼全部被執行,要麼全部不執行。如果事務的所有子事務全部提交成功,則所有的資料庫操作被提交,資料庫狀態發生變化;如果有子事務失敗,則其他子事務的資料庫操作被回滾,即資料庫回到事務執行前的狀態,不會發生狀態轉換

2、一致性

事務的執行使得資料庫從一種正確狀態轉換成另外一種正確狀態

3、隔離性

在事務正確提交之前,不允許把事務對該資料的改變提供給任何其他事務,即在事務正確提交之前,它可能的結果不應該顯示給其他事務

4、永續性

事務正確提交之後,其結果將永遠儲存在資料庫之中,即使在事務提交之後有了其他故障,事務的處理結果也會得到儲存

二、併發下事務可能出現的問題

1)幻讀:事務1讀取記錄時事務2增加了記錄並提交,事務1再次讀取時可以看到事務2新增的記錄;

2)不可重複讀取:事務1讀取記錄時,事務2更新了記錄並提交,事務1再次讀取時可以看到事務2修改後的記錄; 

3)髒讀:事務1更新了記錄,但沒有提交,事務2讀取了更新後的行,然後事務t1回滾,現在t2讀取無效。

三、spring事務的五個隔離級別:

1)isolation_default 

這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別.另外四個與jdbc的隔離級別相對應;

在mysql資料庫中,支援上面四種隔離級別,預設的為repeatable read (可重複讀);而在oracle資料庫中,只支援serializable (序列化)級別和read committed (讀已提交)這兩種級別,其中預設的為read committed級別

2)isolation_read_uncommitted 讀未提交

這是事務最低的隔離級別,它充許別外乙個事務可以看到這個事務未提交的資料。 

這種隔離級別會產生髒讀,不可重複讀和幻像讀。

3)isolation_read_committed 讀已提交

保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙個事務不能讀取該事務未提交的資料。 

這種事務隔離級別可以避免髒讀出現,但是可能會出現不可重複讀和幻像讀。

4)isolation_repeatable_read 可重複讀

這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。 

它除了保證乙個事務不能讀取另乙個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)。

5)isolation_serializable 

這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。 

除了防止髒讀,不可重複讀外,還避免了幻像讀。

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

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...