Spring 事務 傳播行為 隔離級別

2021-10-04 11:34:22 字數 1372 閱讀 1915

資料庫事務併發問題

隔離級別

各個隔離級別解決併發問題的能力

當事務方法被另乙個事務方法呼叫時,必須指定事務應該如何傳播。例如:方法可能繼續在現有的事務中執行,也可能開啟乙個新事務,並在自己的事務中執行。事務的傳播行為可以由傳播屬性指定。

spring 定義了 7 種傳播行為。

如果有事務在執行,當前的方法就在這個事務內執行,否則,就啟動乙個新的事務,並在自己的事務內執行。

當前的方法必須啟動新事務,並在它自己的事務內執行,如果有事務正在執行,應該將它掛起。

如果有事務在執行,當前的方法就在這個事務內執行,否則它可以不執行在事務中。

當前方法不應該執行在事務中,如果有執行的事務,將它掛起。

當前的方法必須執行在事務內部,如果沒有正在執行的事務,就丟擲異常。

當前方法不應該執行在事務中,如果有執行的事務,就丟擲異常。

如果有事務在執行,當前的方法就應該在這個事務的巢狀事務內執行,否則,就啟動乙個新的事務,並在它自己的事務內執行。

模擬兩個事務分別為 t1 和 t2 ,去讀取商品表裡商品的**。

t1 將一條記錄的 price 值從 10 修改為 20

t2 讀取到 price 為 20

t1 回滾,price 變回 10

t2 讀到的 price 的值 20 就是乙個髒資料

t1 讀取 price 值 10

t2 將 price 修改為 30

t1 再次讀取 price 值為 30 ,重複讀取時,值不一樣

t1 讀取商品表中一部分記錄

t2 向商品表中插入了新的行

t1 讀取商品表時,多出一些行,彷彿自己出現了幻覺

資料庫系統必須具有隔離併發執行各個事務的能力,使他們不會相互影響,避免各種併發問題。乙個事務與其他事務隔離的程度稱為隔離級別。sql 標準中規定了多種事務隔離級別,不同隔離級別對應不同的干擾程度,隔離級別越高,資料一致性就越好,但併發性越弱。

read uncommitted

允許 t1 讀取 t2 未提交的修改。

read committed

要求 t1 只能讀取 t2 已提交的修改。

開發中常用

repeatable read

確保 t1 可以多次從乙個欄位中讀取到相同的值,即 t1 執行期間禁止其他事務對這個字段進行更新。

serializable

確保 t1 可以多次從乙個表中讀取到相同的行,在 t1 執行期間,禁止其他事務對這個表進行新增、更新、刪除操作。可以避免任何併發問題,但效能十分低下。

髒讀不可重複讀

幻讀讀未提交有有

有讀已提交無有

有可重複讀無無

有序列化無無

spring事務傳播行為與事務隔離等級

propagation屬性的傳播行為 required 指定當前方法必需在事務環境中執行,如果當前有事務環境就加入當前正在執行的事務環境,如果當前沒有事務,就新建乙個事務。這是預設值。supports 指定當前方法加入當前事務環境,如果當前沒有事務,就以非事務方式執行。mandatory 指定當前方...

Spring 事務隔離級別和傳播行為

名詞 含義原因 髒讀乙個事務讀取了另乙個事務還沒有提交的資料 乙個事務對某資料進行更新,但並未提交,另一事務讀取到了該資料,但是前乙個事務如果回滾,那麼後乙個事務就讀取到了錯誤資料 不可重複讀 乙個事務多次讀取同乙個資料,結果不同 乙個事務在2次讀取某資料之間時,另乙個事務對資料進行了更新,導致前乙...

spring 事務傳播行為

事務傳播行為種類 spring在transactiondefinition介面中規定了7種型別的事務傳播行為,它們規定了事務方法和事務方法發生巢狀呼叫時事務如何進行傳播 事務傳播行為型別 事務傳播行為型別 說明propagation required 如果當前沒有事務,就新建乙個事務,如果已經存在乙...