爲了完成對數據的操做,企業應用常常要求併發訪問在多個構件之間共享的數據。這些應用在下列條件下應該維護數據的完整性(由應用的商務規則來定義):
分佈式訪問一個單獨的數據資源,以及從一個單獨的應用構件訪問分佈式資源。
在這種狀況,可能要求在(分佈式)資源上的一組操做被看成一個工做單元(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進行回滾。