複製鏈接
請複製以下鏈接發送給好友

數據庫事務

鎖定
數據庫事務( transaction)是訪問並可能操作各種數據項的一個數據庫操作序列,這些操作要麼全部執行,要麼全部不執行,是一個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部數據庫操作組成。 [1] 
中文名
數據庫事務
外文名
(Database Transaction)
實    質
一系列操作
要    求
必須滿足所謂的ACID屬性

數據庫事務簡介

在數據庫系統中,事務是工作的離散單位,它可以是修改一個用户的賬户餘額,也可以是庫存項的寫操作。在單用户、單數據庫環境下執行事務比較簡單,但在分佈式環境下,維護多個數據庫的完整性就比較複雜。大多數聯機事務處理系統是在大型計算機上實現的,這是由於它的操作複雜,需要快速的輸入/輸出和完善的管理。如果一個事務在多個場地進行修改,那就需要管理機制來防止數據重寫並提供同步。另外還需要具有返回失效事務的能力,提供安全保障和提供數據恢復能力。 [2] 
比如,我們去銀行轉賬,操作可以分為下面兩個環節: [3] 
(1)從第一個賬户劃出款項。 [3] 
(2)將款項存入第二個賬户。 [3] 
在這個過程中,兩個環節是關聯的。第一個賬户劃出款項必須保證正確的存入第二個賬户,如果第二個環節沒有完成,整個的過程都應該取消,否則就會發生丟失款項的問題。整個交易過程,可以看作是一個事務,成功則全部成功,失敗則需要全部撤消,這樣可以避免當操作的中間環節出現問題時,產生數據不一致的問題。 [3] 
數據庫事務是一個邏輯上的劃分,有的時候並不是很明顯,它可以是一個操作步驟也可以是多個操作步驟。我們可以這樣理解數據庫事務:對數據庫所做的一系列修改,在修改過程中,暫時不寫入數據庫,而是緩存起來,用户在自己的終端可以預覽變化,直到全部修改完成,並經過檢查確認無誤後,一次性提交併寫入數據庫,在提交之前,必要的話所做的修改都可以取消。提交之後,就不能撤銷,提交成功後其他用户才可以通過查詢瀏覽數據的變化。 [3] 

數據庫事務性質

1、原子性(Atomicity):事務中的全部操作在數據庫中是不可分割的,要麼全部完成,要麼全部不執行。 [1] 
2、一致性(Consistency):幾個並行執行的事務,其執行結果必須與按某一順序 串行執行的結果相一致。 [1] 
3、隔離性(Isolation):事務的執行不受其他事務的干擾,事務執行的中間結果對其他事務必須是透明的。 [1] 
4、持久性(Durability):對於任意已提交事務,系統必須保證該事務對數據庫的改變不被丟失,即使數據庫出現故障。 [1] 
事務的ACID特性是由關係數據庫系統(DBMS)來實現的,DBMS採用日誌來保證事務的原子性、一致性和持久性。日誌記錄了事務對數據庫所作的更新,如果某個事務在執行過程中發生錯誤,就可以根據日誌撤銷事務對數據庫已做的更新,使得數據庫回滾到執行事務前的初始狀態。
對於事務的隔離性,DBMS是採用鎖機制來實現的。當多個事務同時更新數據庫中相同的數據時,只允許持有鎖的事務能更新該數據,其他事務必須等待,直到前一個事務釋放了鎖,其他事務才有機會更新該數據。

數據庫事務作用

一個數據庫事務通常包含了一個序列的對數據庫的讀/寫操作。它的存在包含有以下兩個目的: [4] 
  1. 為數據庫操作序列提供了一個從失敗中恢復到正常狀態的方法,同時提供了數據庫即使在異常狀態下仍能保持一致性的方法。 [4] 
  2. 當多個應用程序併發訪問數據庫時,可以在這些應用程序之間提供一個隔離方法,以防止彼此的操作互相干擾。 [4] 
當事務被提交給了DBMS(數據庫管理系統),則DBMS(數據庫管理系統)需要確保該事務中的所有操作都成功完成且其結果被永久保存在數據庫中,如果事務中有的操作沒有成功完成,則事務中的所有操作都需要被回滾,回到事務執行前的狀態;同時,該事務對數據庫或者其他事務的執行無影響,所有的事務都好像在獨立的運行。 [4] 
但在現實情況下,失敗的風險很高。在一個數據庫事務的執行過程中,有可能會遇上事務操作失敗、數據庫系統/操作系統失敗,甚至是存儲介質失敗等情況。這便需要DBMS對一個執行失敗的事務執行恢復操作,將其數據庫狀態恢復到一致狀態(數據的一致性得到保證的狀態)。為了實現將數據庫狀態恢復到一致狀態的功能,DBMS通常需要維護事務日誌以追蹤事務中所有影響數據庫數據的操作。 [4] 

數據庫事務數據庫事務模型

數據庫事務顯式事務

顯式事務又稱自定義事務,是指用顯式的方式定義其開始和結束的事務,當使用start transaction和 commit語句時則表示發生顯式事務。 [5] 

數據庫事務隱式事務

隱式事務是指每一條數據操作語句都自動地成為一個事務,事務的開始是隱式的,事務的結束有明確的標記。即當用户進行數據操作時,系統自動開啓一個事務,事務的結束則需手動調用 commit或 rollback語句來結束當前事務,在當前事務結束後又自動開啓一個新事務。 [5] 

數據庫事務自動事務

自動事務是指能夠自動開啓事務並且能夠自動結束事務。在事務執行過程中,如果沒有出現異常,事務則自動提交;當執行過程產生錯誤時,則事務自動回滾。 [5] 

數據庫事務優點

以事務的方式對數據庫進行訪問,有如下的優點: [3] 
1、把邏輯相關的操作分成了一個組; [3] 
2、在數據永久改變前,可以預覽數據變化; [3] 
3、能夠保證數據的讀一致性。 [3] 
參考資料
  • 1.    青島英谷教育科技股份有限公司編著.輕量級JAVA EE程序設計及實踐:西安電子科技大學出版社,2015.08:第180頁
  • 2.    餘綺芬 王守平 沈宗惠.英漢計算機網絡與通信術語淺解:人民郵電出版社,2000年03月第1版:第57頁
  • 3.    高繼民主編.Oracle數據庫SQL和PL/SQL實例教程:西安電子科技大學出版社,2004年06月第1版:第70頁
  • 4.    Jim Gray, Andreas Reuter 著,孟小峯、於戈 等譯. 《事務處理:概念與技術》(Transaction Prossessing: Concepts and Techniques). 機械工業出版社. 2004年. ISBN 9787111126416.
  • 5.    温立輝主編.數據庫高級應用技術:北京理工大學出版社,2016.08:第19頁