資料庫事務

資料庫管理系統的邏輯單位

資料庫事務(簡稱:事務)是資料庫管理系統執行過程中的一個邏輯單位,由一個有限的資料庫操作序列構成。

概要


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

ACID性質


主條目:ACID
並非任意的對資料庫的操作序列都是資料庫事務。資料庫事務擁有以下四個特性,習慣上被稱之為ACID特性。
• 原子性(Atomicity):事務作為一個整體被執行,包含在其中的對資料庫的操作要麼全部被執行,要麼都不執行。
• 一致性(Consistency):事務應確保資料庫的狀態從一個一致狀態轉變為另一個一致狀態。一致狀態的含義是資料庫中的數據應滿足完整性約束。
• 隔離性(Isolation):多個事務併發執行時,一個事務的執行不應影響其他事務的執行。
• 持久性(Durability):已被提交的事務對資料庫的修改應該永久保存在資料庫中。

模型


顯式事務
顯式事務又稱自定義事務,是指用顯式的方式定義其開始和結束的事務,當使用start transaction和 commit語句時則表示發生顯式事務。 
隱式事務
隱式事務是指每一條數據操作語句都自動地成為一個事務,事務的開始是隱式的,事務的結束有明確的標記。即當用戶進行數據操作時,系統自動開啟一個事務,事務的結束則需手動調用 commit或 rollback語句來結束當前事務,在當前事務結束后又自動開啟一個新事務。 
自動事務
自動事務是指能夠自動開啟事務並且能夠自動結束事務。在事務執行過程中,如果沒有出現異常,事務則自動提交;當執行過程產生錯誤時,則事務自動回滾。
優點
以事務的方式對資料庫進行訪問,有如下的優點: 
1、把邏輯相關的操作分成了一個組; 
2、在數據永久改變前,可以預覽數據變化; 
3、能夠保證數據的一致性。 

參見


• 資料庫管理系統