spring 事務傳播特性 和隔離級別

2022-07-03 17:09:12 字數 2043 閱讀 5107

事務的幾種傳播特性

1. propagation_required: 如果存在乙個事務,則支援當前事務。如果沒有事務則開啟

2. propagation_supports: 如果存在乙個事務,支援當前事務。如果沒有事務,則非事務的執行

3. propagation_mandatory: 如果已經存在乙個事務,支援當前事務。如果沒有乙個活動的事務,則丟擲異常。

4. propagation_requires_new: 總是開啟乙個新的事務。如果乙個事務已經存在,則將這個存在的事務掛起。

5. propagation_not_supported: 總是非事務地執行,並掛起任何存在的事務。

6. propagation_never: 總是非事務地執行,如果存在乙個活動事務,則丟擲異常

7. propagation_nested:如果乙個活動的事務存在,則執行在乙個巢狀的事務中. 如果沒有活動事務, 

則按transactiondefinition.propagation_required 屬性執行

spring事務的隔離級別

1. isolation_default: 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別.

另外四個與jdbc的隔離級別相對應

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

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

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

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

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

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

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

其中的一些概念的說明:

髒讀:指當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。因為這個資料是還沒有提交的資料, 那麼另外一 個事務讀到的這個資料是髒資料,依據髒資料所做的操作可能是不正確的。

不可重複讀:指在乙個事務內,多次讀同一資料。在這個事務還沒有結束時,另外乙個事務也訪問該同一資料。 那麼,在第乙個事務中的兩次讀資料之間,由於第二個事務的修改,那麼第乙個事務兩次讀到的資料可能是不一樣的。這樣就發生了在乙個事務內兩次讀到的資料是不一樣的,因此稱為是不可重複讀。

幻覺讀:指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,這種修改涉及 到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第乙個事務的使用者發現表中還有沒有修改的資料行,就好象發生了幻覺一樣。

隔離級別

髒讀不可重複讀

幻讀未提交讀

可能可能

可能已提交讀

不可能可能

可能可重複讀

不可能不可能

可能序列化

不可能不可能

不可能mysql 預設的級別是 repeatable read(可重複讀),這表示在 mysql 的預設情況下,「髒讀」、「不可重複讀」是不會發生的。這就需要在更新的時候進行必要的鎖定(innodb 是採用行級鎖的方式),從而保證一致性。需要注意的是 innodb 的行鎖是通過給索引上的索引項加鎖來實現的,這個特點意味著:只有通過索引條件檢索資料,innodb 才使用行級鎖,否則,innodb 將使用表鎖!

我們資料庫表是 innodb 引擎的表,而 mysql 的 innodb 引擎是乙個支援事務的引擎,其預設操作模式是 autocommit 自動提交模式。什麼意思呢?除非我們顯式地開始乙個事務,否則每個查詢都被當做乙個單獨的事務自動執行。

Spring事務的隔離級別和傳播特性

五個事務隔級別分別為 lsolation的屬性值 在乙個典型的應用程式中,多個事務同時執行,經常會為了完成他們的工作而操作同乙個資料。併發雖然是必需的,但是會導致一下問題 1,default 預設的事務隔離級別 2,read uncommitted 讀未提交,乙個事務可以操作另外乙個未提交的事務,不...

spring事務傳播和事務隔離

是最常用的,支援當前事務,若當前沒事務,就新建乙個事務。經測試,左側的事務註解必須得新增,右側的可加可不加 這倆insert事務合併成乙個事務了 支援當前事務,若當前沒事務,就以非事務方式執行。上圖 a調b,a有事務,b事務用supports,ab合併為乙個事務了。ab都會回滾 上圖 a調b,a無事...

Spring 事務隔離級別與傳播特性

1.原理 a.spring事務的本質就是資料庫對事務的支援,沒有資料庫事務的支援,spring是無法提供事務功能的 b.純jdbc操作步驟 獲取連線 connection conn drivermanager.getconnection 開啟事務 conn.setautocommit true fa...