Hibernate的事務處理

  1. 事務的概念
      事務是數據庫操作中一個最小的執行單元,它由一組相互依賴的操作行爲組成。例如,由查詢和更新兩個操作行爲構成一個事務。事務的成功與否取決於這些操作行爲是否都能執行成功。只要一個操作行爲失敗,那麼整個事務執行失敗。這時必須回滾到事務執行前的狀態。
  2. 事務的特性
      數據庫事務必須具有ACID特徵,即Atomic(原子性)、Consistency(一致性)、Isolation(隔離性)、Durability(持久性)。
      –原子性:是指整個數據庫事務是一個不可分割的工作單元。只有事務中所有操作執行成功,該事務纔算執行成功。如果事務中任何一個SQL語句執行失敗,那麼該事務失敗。這時所有已執行成功的SQL語句也必須撤銷,數據庫應該回滾到執行該事務前的狀態。
      –一致性:是指事務不能破壞關係數據的完整性和業務邏輯上的一致性。如果事務開始時系統處於一致狀態,則不管事務執行成功還是失敗,當其結束時系統也應處於一致狀態。例如前面例子中,如果從user1中扣除100元,並且向user2中添加100元兩個步驟中的任何一個操作不成功,則系統必須返回到用戶取錢之前的狀態。
      –隔離性:事務的隔離性要求事務訪問的任何數據不會受到其他事務所做的任何改變的影響,直到該事務完成。
      –持久性:是指事務只要成功結束,它對數據庫所做的操作必須永久的保存下來,即使系統發生崩潰,重啓系統後,數據庫還能恢復到事務成功結束時的狀態。
  3. 數據庫的隔離級別
      數據庫的鎖機制可以保證事務的隔離性,避免多個事務同時對同一資源進行操作。但是當鎖的數目太多時,會影響數據庫的併發性能。併發性能是指數據庫系統同時給各種訪問者提供服務的能力。例如當一個事務鎖定某一個資源時,其他的事務必須停下來等待,這樣就降低了數據庫響應多個請求的速度。所以,爲了能讓用戶根據實際需求,在事務隔離性和併發性之間做出合理的權衡,數據庫系統提供了一下四中事務隔離的級別供用戶選擇。
      (1)Serializable(串行化)
      當數據庫採用該級別(級別最高)進行隔離時,一個事務在執行的過程中完全看不到其他事務對數據庫的更新。當兩個事務同時訪問同一資源時,如果一個事務已經開始訪問該資源,則另一個事務必須停下來等待,直到前一個事務結束。
      (2)Repeatable Read(可重複讀)
      當數據庫採用這個級別進行隔離時,一個事務在執行的過程中可以看到其他事務已經提交的新插入的記錄,但是看不到其他事務對已有記錄的更新。
      (3)Read Committed(讀已提交數據)
      當數據庫採用該隔離級別時,一個事務在執行的過程中可以看到其他事務已經提交的新插入的記錄,並且可以看到其他事務已經提交的對已有記錄的更改。
      (4)Read Committed(讀未提交數據)
      當數據庫採用該隔離級別(級別最低)時,一個事務在執行過程中可以看到其他事物沒有提交的新插入的記錄,而且可以看到其他事務沒有提交的對已有記錄的更新。
      隔離級別越高,越能保證數據的完整性和一致性,但是對併發性能的影響也大。對於多數數據庫系統,可以優先考慮把隔離級別設置爲Read Committed。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章