1. 程式人生 > >什麼是事務(transaction)?它有什麼好處

什麼是事務(transaction)?它有什麼好處

什麼是事務(transaction)?它有什麼好處

為了完成對資料的操作,企業應用經常要求併發訪問在多個構件之間共享的資料。這些應用在下列條件下應該維護資料的完整性(由應用的商務規則來定義): 

分散式訪問一個單獨的資料資源,以及從一個單獨的應用構件訪問分散式資源。 
在這種情況,可能要求在(分散式)資源上的一組操作被當作一個工作單元(unit)。在一個工作單元中, 操作的所有部分一起成功或失敗並恢復。在下面的情況下這個問題更加複雜: 

通過一組分散式的、訪問多個資源的資料的構件實現一個工作單元,和/或部分操作是被順序執行的或在要求協調和/或同步的並行執行緒中。 

在所有情況下, 都要求應用維護一個工作單元的成功或失敗。在失敗的情況下,所有資源要把資料狀態返回到以前的狀態 
(比如說,工作單元開始前的狀態)。 
事務的概念和和事務管理器(或者一個事務處理服務)在一個工作單元中的維護資料完整性,這就簡化了這樣的企業級別分散式應用的構造。 

一個事務是有下列屬性的一個工作單元: 


原子性(ATOMICITY): 
一個事務要被完全的無二義性的做完或撤消。在任何操作出現一個錯誤的情況下,構成事務的所有操作的效果必須被撤消,資料應被回滾到以前的狀態。 

一致性(CONSISTENCY): 
一個事務應該保護所有定義在資料上的不變的屬性(例如完整性約束)。在完成了一個成功的事務時,資料應處於一致的狀態。換句話說,一個事務應該把系統從一個一致-狀態轉換到另一個一致狀態。舉個例子,在關係資料庫的情況下, 
一個一致的事務將保護定義在資料上的所有完整性約束。 

隔離性(ISOLATION): 
在同一個環境中可能有多個事務併發執行,而每個事務都應表現為獨立執行。序列的執行一系列事務的效果應該同於併發的執行它們。這要求兩件事: 

在一個事務執行過程中,資料的中間的(可能不一致)狀態不應該被暴露給所有的其他事務。 
兩個併發的事務應該不能操作同一項資料。資料庫管理系統通常使用鎖來實現這個特徵。 

永續性(DURABILITY): 
一個被完成的事務的效果應該是持久的。

 

****************************************************************************************************************************************************************************************************************************

 ****************************************************************************************************************************************************************************************************************************

【考點】
資料庫事務基礎知識。
【出現頻率】
★★★☆☆
【解答】
事務提供了一種機制,可用來將一系列資料庫更改歸入一個邏輯操作。更改資料庫後,所做的更改可以作為一個單元進行提交或取消。事務可確保遵循原子性、一致性、隔離性和持續性(ACID)這幾種屬性,以使資料能夠正確地提交到資料庫中。
使用事務機制的好處非常明顯,例如銀行轉賬之類的交易操作中,事務有著重要的作用。事務的成功取決於事務單元帳戶相互依賴的操作行為是否能全部執行成功,只要有一個操作行為失敗,整個事務將失敗。例如:客戶A和客戶B的銀行賬戶金額都是10000元人民幣,客戶A需要把自己帳戶中的5000元人民幣轉到客戶B的賬戶上。這個過程看似簡單,實際上涉及了一系列的資料庫操作,可以簡單地視為兩步基本操作,即從客戶A帳戶的金額中扣除5000元人民幣,以及將客戶B帳戶中金額新增5000元人民幣。假設第1步資料庫操作成功,而第二步失敗的話,將導致整個操作失敗,並且客戶A帳戶金額將被扣除5000元人民幣。事務機制可以避免此類情況,以保證整個操作的完成,如果某步操作出錯,之前所作的資料庫操作將全部失效。
【分析】
事務是單個的工作單元。如果某個事務成功,則在該事務中進行的所有資料更改均會提交,成為資料庫中的永久組成部分。如果事務遇到錯誤且必須取消或回滾,則所有資料更改均被清除。一個邏輯工作單元必須有ACID屬性,只有這樣才能成為一個事務。ACID屬性有以下4個屬性。
1.原子性
事務必須是原子工作單元。對於其資料修改,要麼全都執行,要麼全都不執行。
2.一致性
事務在完成時,必須使所有的資料都保持一致狀態。在相關資料庫中,所有規則都必須應用於事務的修改,以保持所有資料的完整性。事務結束時,所有的內部資料結構都必須是正確的。
3.隔離性
由併發事務所做的修改必須與任何其他併發事務所做的修改隔離。事務識別資料時資料所處的狀態,或者是另一個併發事務修改它之前的狀態,或者是第二個事務修改它之後的狀態,事務不會識別中間狀態的資料。這稱為可序列性,因為它能夠重新裝載起始資料,並且重播一系列事務,以使資料結束時的狀態與原始事務執行的狀態相同。
4.永續性
事務完成之後,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。
事務有以下3種執行模式。
q      自動提交事務:每條單獨的語句都是一個事務。
q      顯式事務:每個事務均以BEGIN TRANSACTION語句顯式開始,以COMMIT或ROLLBACK語句顯式結束。
q      隱性事務:在上個事務完成時新事務隱式啟動,但每個事務仍以COMMIT或ROLLBACK語句顯式完成。
說明:還有一種批處理級事務模式,該模式僅應用於多活動結果集(MARS),在MARS會話中啟動的Transact-SQL顯式或隱式事務變為批處理級事務。當批處理完成時沒有提交或回滾的批處理級事務自動由SQL Server進行回滾。