事務的傳播屬性和隔離級別是比較常見的面試題,下面就來總結一下。
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 支援當前事務,如果當前沒有事務,就丟...