Spring事務

 事務隔離五種級別:
        TRANSACTION_NONE  不使用事務。
        TRANSACTION_READ_UNCOMMITTED  允許髒讀。
        TRANSACTION_READ_COMMITTED  防止髒讀,最常用的隔離級別,並且是大多數數據庫的默認隔離級別
        TRANSACTION_REPEATABLE_READ  可以防止髒讀和不可重複讀,
        TRANSACTION_SERIALIZABLE  可以防止髒讀,不可重複讀取和幻讀,(事務串行化)會降低數據庫的效率

   1 髒讀:修改時加排他鎖,直到事務提交後才釋放,讀取時加共享鎖,讀取完釋放事務1讀取數據時加上共享鎖(這樣在事務1讀取數據的過程中,其他事務就不會修改該數據),不允許任何事物操作該數據,只能讀取,之後1如果有更新操作,那麼會轉換爲排他鎖,其他事務更 無權參與進來讀寫,這樣就防止了髒讀問題。

       但是當事務1讀取數據過程中,有可能其他事務也讀取了該數據,讀取完畢後共享鎖釋放,此時事務1修改數據,修改 完畢提交事務,其他事務再次讀取數據時候發現數據不一致,就會出現不可重複讀問題,所以這樣不能夠避免不可重複讀問題。

      2 不可重複讀:讀取數據時加共享鎖,寫數據時加排他鎖,都是事務提交才釋放鎖。讀取時候不允許其他事物修改該數據,不管數據在事務過程中讀取多少次,數據都是一致的,避免了不可重複讀問題
      3 幻讀問題:幻讀是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,比如這種修改涉及到表中的“全部數據行”。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入“一行新數據”。那麼,以後就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,就好象發生了幻覺一樣.一般解決幻讀的方法是增加範圍鎖RangeS,鎖定檢鎖範圍爲只讀,這樣就避免了幻讀。

在數據庫定義的四種隔離級別中,REPEATABLE_READ級別可以避免“不可重複讀”的問題,但是仍然避免不了“幻讀”問題,只有最高隔離級別SERIALIZABLE_READ纔可以保證不出現幻讀的問題。
幻讀(Phantom Read) 是指當用戶讀取某一範圍的數據行時,B事務在該範圍內插入了新行,當用戶再讀取該範圍的數據行時,會發現有新的“幻影”行。InnoDB和Falcon存儲引擎通 過多版本併發控制機制解決了幻讀問題。


//事務傳播屬性
@Transactional(propagation=Propagation.REQUIRED)//如果有事務,那麼加入事務,沒有的話新創建一個
@Transactional(propagation=Propagation.NOT_SUPPORTED)//這個方法不開啓事務
@Transactional(propagation=Propagation.REQUIRES_NEW)//不管是否存在事務,都創建一個新的事務,原來的掛起,新的執行完畢,繼續執行老的事務
@Transactional(propagation=Propagation.MANDATORY)//必須在一個已有的事務中執行,否則拋出異常
@Transactional(propagation=Propagation.NEVER)//不能在一個事務中執行,就是當前必須沒有事務,否則拋出異常
@Transactional(propagation=Propagation.SUPPORTS)//其他bean調用這個方法,如果在其他bean中聲明瞭事務,就是用事務。沒有聲明,就不用事務。
@Transactional(propagation=Propagation.NESTED)//如果一個活動的事務存在,則運行在一個嵌套的事務中,如果沒有活動的事務,則按照REQUIRED屬性執行,它使用一個單獨的事務。這個事務擁有多個回滾的保存點,內部事務的回滾不會對外部事務造成影響,它只對DataSource TransactionManager事務管理器起效。
@Transactional(propagation=Propagation.REQUIRED,readOnly=true)//只讀,不能更新,刪除
@Transactional(propagation=Propagation.REQUIRED,timeout=30)//超時30秒
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)//數據庫隔離級別

發佈了36 篇原創文章 · 獲贊 12 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章