?????? 數據庫的事務處理是在進行數據庫應用開發中必須進行處理的一個問題。那么對于選擇Hibernate作為持久層組件,了解Hibernate的事務處理機制就顯得尤為重要了。
事務的基本概念
?????? 事務(Transaction)是并發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要么都執行,要么都不執行,它是一個不可分割的工作單位。例如,銀行轉賬工作:從一個賬號扣款并使另一個賬號增款,這兩個操作要么都執行,要么都不執行。所以,應該把它們看成一個事務。事務是數據庫維護數據一致性的單位,在每個事務結束時,都能保持數據一致性。
?????? 針對上面的描述可以看出,事務的提出主要是為了解決并發情況下保持數據一致性的問題。
?????? 事務具有以下4個基本特征。
●?? Atomic(原子性):事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要么全部成功,要么全部失敗。
●?? Consistency(一致性):只有合法的數據可以被寫入數據庫,否則事務應該將其回滾到最初狀態。
●?? Isolation(隔離性):事務允許多個用戶對同一個數據進行并發訪問,而不破壞數據的正確性和完整性。同時,并行事務的修改必須與其他并行事務的修改相互獨立。
●?? Durability(持久性):事務結束后,事務處理的結果必須能夠得到固化。
?????? 數據庫肯定是要被廣大客戶所共享訪問的,那么在數據庫操作過程中很可能出現以下幾種不確定情況。
●?? 更新丟失(Lost update):兩個事務都同時更新一行數據,但是第二個事務卻中途失敗退出,導致對數據的兩個修改都失效了。這是因為系統沒有執行任何的鎖操作,因此并發事務并沒有被隔離開來。
●?? 臟讀取(Dirty Reads):一個事務開始讀取了某行數據,但是另外一個事務已經更新了此數據但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾。
●?? 不可重復讀取(Non-repeatable Reads):一個事務對同一行數據重復讀取兩次,但是卻得到了不同的結果。例如,在兩次讀取的中途,有另外一個事務對該行數據進行了修改,并提交。
●?? 兩次更新問題(Second lost updates problem):無法重復讀取的特例。有兩個并發事務同時讀取同一行數據,然后其中一個對它進行修改提交,而另一個也進行了修改提交。這就會造成第一次寫操作失效。
●?? 虛讀(Phantom Reads):事務在操作過程中進行兩次查詢,第二次查詢的結果包含了第一次查詢中未出現的數據(這里并不要求兩次查詢的SQL語句相同)。這是因為在兩次查詢過程中有另外一個事務插入數據造成的。
posted on 2009-07-19 21:04
jadmin 閱讀(151)
評論(0) 編輯 收藏