框架 Spring事務的隔離級別

2021-09-11 23:36:50 字數 1502 閱讀 2031

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