什么是事務(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進行回滾。


免責聲明!

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



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