事務的傳播屬性和隔離級別

2021-10-02 10:50:04 字數 1378 閱讀 7983

事務的傳播屬性和隔離級別是比較常見的面試題,下面就來總結一下。

spring提供了7種傳播屬性,如下**:

傳播屬性

描述required

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

requires_new

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

supports

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

not_supported

當前方法不能執行在事務中,如果有事務執行,就將它掛起

mandatory

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

never

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

nested

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

事務的傳播屬性在@transactional註解的propagation屬性中定義。

事務的隔離級別解決的是資料庫事務併發的問題,資料庫併發會造成髒讀、幻讀、不可重複讀的問題。

為了解決這些問題,資料庫設定了4種隔離級別。

資料庫的隔離級如下:

read uncommitted:讀未提交,允許讀取未提交的修改。

read committed:讀已提交,只能讀取已提交的修改。

repeatable read:可重複讀,在乙個事務中可以多次讀到相同的值,在事務執行期間禁止其他事務對這個字段進行更新。

serializable:序列化,確保乙個事務執行期間禁止其他事務對這個表進行新增、更新、刪除操作。可以避免任何併發問題,但是效能低下。

read uncommitted 沒有辦法解決髒讀、幻讀和不可重複讀;read committed無法解決幻讀和不可重複度,可以解決髒讀;repeatable read 可以解決髒讀和不可重複讀,沒有辦法解決幻讀;序列化serializable三種併發問題都可以解決。

oracle資料庫只支援read committed和serializable,並且預設read committed。

mysql資料庫四種隔離級別都支援,預設repeatable read。

事務的隔離屬性在@transactional註解的isolation屬性中定義。

事務的隔離級別和傳播屬性

事務所具有的四種特性 原子性,一致性,隔離性,永續性 原子性 個人理解,就是事務執行不可分割,要麼全部完成,要麼全部拉倒不幹。一致性 關於一致性這個概念我們來舉個例子說明吧,假設張三給李四轉了100元,那麼需要先從張三那邊扣除100,然後李四那邊增加100,這個轉賬的過程對於其他事務而言是無法看到的...

Spring事務傳播屬性和隔離級別

當事務方法被另乙個事務方法呼叫時,必須指定事務應該如何傳播。例如 方法可能繼續在現有事務中執行,也可能開啟乙個新事務,並在自己的事務中執行 事務的傳播行為可以由傳播屬性指定 spring 定義了7種類傳播行為 傳播屬性 描述required 常用 如果有事務在執行,當前的方法就在這個事務內執行,否則...

闡述事務的隔離級別和傳播屬性

七個事務傳播屬性 propagation required 支援當前事務,如果當前沒有事務,就新建乙個事務。這是最常見的選擇。propagation supports 支援當前事務,如果當前沒有事務,就以非事務方式執行。propagation mandatory 支援當前事務,如果當前沒有事務,就丟...