spring事務傳播機制和隔離級別


7種事務的傳播機制(可通過spring配置或注解來設置)

  1. REQUIRED(默認):支持使用當前事務,如果當前事務不存在,創建一個新事務。
  2. SUPPORTS:支持使用當前事務,如果當前事務不存在,則不使用事務。
  3. MANDATORY:中文翻譯為強制,支持使用當前事務,如果當前事務不存在,則拋出Exception。
  4. REQUIRES_NEW:創建一個新事務,如果當前事務存在,把當前事務掛起。
  5. NOT_SUPPORTED:無事務執行,如果當前事務存在,把當前事務掛起。
  6. NEVER:無事務執行,如果當前有事務則拋出Exception。
  7. NESTED:嵌套事務,如果當前事務存在,那么在嵌套的事務中執行。如果當前事務不存在,則表現跟REQUIRED一樣。

注解配置時如:@Transactional(propagation=Propagation.REQUIRED) 

四種隔離級別

注解配置時如:@Transactional(isolation = Isolation.READ_UNCOMMITTED)

事務隔離級別 臟讀 不可重復讀 幻讀
讀未提交(Read-Uncommitted)
不可重復讀(Read-Committed)
可重復讀(Repeatable-Read)
串行化(Serializable)

其中:可重復讀(repeatable-read)表示:在開始讀取數據(事務開啟)時,不再允許修改操作

mysql默認的事務隔離級別為repeatable-read

 

事務的並發問題

  1、臟讀:事務A讀取了事務B更新的數據,然后B回滾操作,那么A讀取到的數據是臟數據

  2、不可重復讀:事務 A 多次讀取同一數據,事務 B 在事務A多次讀取的過程中,對數據作了更新並提交,導致事務A多次讀取同一數據時,結果 不一致。

  3、幻讀:系統管理員A將數據庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束后發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。

  小結:不可重復讀的和幻讀很容易混淆,不可重復讀側重於修改,幻讀側重於新增或刪除。解決不可重復讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

 

參考:https://blog.csdn.net/qq_39530754/article/details/82701753

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM