Spring 支援的事務隔離級別
阿新 • • 發佈:2020-10-12
併發事務所導致的問題:
當同一個應用程式或者不同應用程式中的多個事務在同一個資料集上併發執行時, 可能會出現許多意外的問題
併發事務所導致的問題可以分為下面三種類型:
髒讀: 對於兩個事物 T1, T2, T1 讀取了已經被 T2 更新但 還沒有被提交的欄位. 之後, 若 T2 回滾, T1讀取的內容就是臨時且無效的.
不可重複讀:對於兩個事物 T1, T2, T1 讀取了一個欄位, 然後 T2 更新了該欄位. 之後, T1再次讀取同一個欄位, 值就不同了.
幻讀:對於兩個事物 T1, T2, T1 從一個表中讀取了一個欄位, 然後 T2 在該表中插入了一些新的行. 之後, 如果 T1 再次讀取同一個表, 就會多出幾行.
事務的隔離級別:
從理論上來說, 事務應該彼此完全隔離, 以避免併發事務所導致的問題. 然而, 那樣會對效能產生極大的影響, 因為事務必須按順序執行.
在實際開發中, 為了提升效能, 事務會以較低的隔離級別執行.
事務的隔離級別可以通過隔離事務屬性指定
事務的隔離級別要得到底層資料庫引擎的支援, 而不是應用程式或者框架的支援.
Oracle 支援的 2 種事務隔離級別:READ_COMMITED , SERIALIZABLE
Mysql 支援 4 中事務隔離級別
用 @Transactional 註解宣告式地管理事務時可以在 @Transactional 的 isolation 屬性中設定隔離級別
@Transactiona(propagation=Propagation .REQUIRES_NEW, isolation=Isolation.READ_COMMITED)
轉載於:https://my.oschina.net/giegie/blog/424503