什麼是數據庫的事務???

什麼是事務?我們知道,數據庫是一個面向多用戶的共享機制,因此數據庫管理系統應當具備併發控制和封鎖機制,保證數據庫系統的正常運行。但是當多個用戶訪問數據庫的時候,如果每一個用戶程序一個一個的串行執行,則每一時刻只有一個用戶執行對數據庫的操作,其他用戶必須等待,這樣的話會嚴重影響數據庫資源的使用。所以數據庫管理系統必有能夠保證多個用戶同時使用數據庫。但是這樣會出現以下三個主要異常問題:
?髒讀數據:當第一個用戶修改數據時,第二個用戶在第一個用戶沒有確認修改之前讀取了該數據,這時可能會出現髒讀現象。如果第一個用戶確認了修改,第二個用戶檢索不到數據庫中所修改的數據,有時這種現象也稱爲丟失修改。
?不可重複讀:當某一個用戶對某一行數據進行第一次讀取過程後,另外一個用戶對該數據進行了修改,從第一個用戶的角度來看,如果再次讀取原先的數據會發現與前次不同,這就是不可重複讀現象。
?發生幻象:當第一個用戶檢查某張表的時候,沒有發現某個值X,但是在該用戶還沒操作完成之前,另外一個用戶插入了一個X值,結果,導致第一個用戶認爲數據庫沒有X值,而實際上數據庫有這個值X。這就是幻象。

用戶之間相互干擾,出現的以上問題,後果不堪設想。因此數據庫系統採用事務的概念來解決這個問題。

事務是一系列作爲一個邏輯單元來執行的操作集合。它是數據庫維護數據一致性的單位,它將數據庫從一致狀態轉變爲新的一致狀態,說的簡單一點就是,如果一組處理步驟要麼全部發生要麼一步也不執行,我們稱該組處理步驟爲一個事務。這樣就保證了數據始終一致的狀態,不至於破壞數據的完整性、可靠性。一個事務執行以後,DBMS會自動檢查數據庫中數據的一致性。

確保數據的一致性是保證數據庫裏面的數據正確反映現實世界的前提。舉個例子大家可能就清楚了,比如一個銀行要將一筆錢從A->B;對數據庫中的操作主要有兩個步驟:一是從A賬戶中減去這筆錢;二是把B賬戶中的錢增加一筆。其實這兩個步驟操作就是一個邏輯單元,就是一個操作集合,就是一個事務。這就要求兩個步驟操作同步執行,要麼它們都操作成功,要麼都操作失敗。如果一個操作失敗,整個事務也就失敗了,並且已經執行的操作都會被撤消,也就是回滾到先前的狀態。

SQLServer啓動事務有三種模式:
?自動提交:在自動提交模式下,每一個SQL語句就是一個事務(也就是一個操作),語句執行完成以後,事務也就完成了,這時在這模式下,SQLSERVER自動結束事務。SQLSERVER爲每個單獨的語句提供這種事務模式,以保證數據的一致性。SQLSERVER的默認方式就是這種方式。但是如果是一組語句操作,要想使用事務模式就得采用下面的方式了。
?顯式:當明確事務開始和結束的點時,所使用的就是顯式事務模式。   開始事務語句:Begin Transaction;結束事務語句:Commit(成功提交)、Rollback(事務失敗)。
?隱式:無論何時使用某些SQL語句,SQLSERVER就會隱式的啓動一個事務。在這裏他也把每一個SQL語句當作一個事務,只不過這種模式負責啓動事務,而自動提交模式負責提交事務,也就是結束事務。

舉例說明如:begin transaction update_A  //開始事務

                     Update biao set A=2000

                     rollback transaction  update_A  //結束事務

 上面的情況是在SQL查詢分析器中執行的,可以虛擬兩個用戶,同時對biao進行訪問,一個更新數據,一個查詢數據,兩個用戶訪問時間交叉。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章