事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質:
原子性(atomicity):事務中的操作要麼全部成功,要麼全部失敗。
一致性(consistency):事務執行前後要保持資料庫的一致性。
隔離性(isolation):多個事務併發執行時,不能互相干擾,每個事務感覺不到其他事務的執行。
永續性(durability):乙個事務成功完成後,它對資料庫的改變是永久的,即使系統出現故障也要保持。
這四個特性被簡稱為acid特性。
事務狀態
事務一共有五種狀態:活動狀態、部分提交狀態、失敗狀態、中止狀態和提交狀態。
初始時,事務處於活動狀態;最後一條語句執行後,事務處於部分提交狀態;事務成功完成後,處於提交狀態;當發現正常操作不能繼續時,事務處於失敗狀態;事務回滾並且資料庫恢復到初始狀態後,事務處於中止狀態。
提交或中止的事務被稱為已經結束的事務。資料庫系統要保證,無論事務成功執行與否,最後都要進入到提交狀態或中止狀態。當判定事務不能繼續正常執行後,系統可以有兩種選擇,重啟事務或殺死事務。當事務失敗不是由於事務本身的邏輯引起時,可以重啟事務,重啟的事務被當作乙個新的事務。當事務失敗是由於事務本身的邏輯引起時,需要將事務殺死,不再重新執行。
併發執行
事務處理系統通常允許多個事務併發執行。事務併發執行主要基於兩點:提高吞吐量和資源利用率以及減少等待時間。其機制與作業系統中多個進行同時在乙個系統中執行是一樣的。
當多個事務併發執行時,資料庫系統必須控制事務之間的相互影響,防止它們破壞資料庫的一致性。系統通過併發控制機制來保證。資料庫系統通過並發控制器來對各個事務進行排程,併發控制器通過輪轉的方式執行不同事務的各個指令,以實現各個事務的併發執行。這一機制與作業系統中的任務排程類似。
資料庫系統通過排程控制事務的併發執行時,需要保證資料庫的一致性。已知序列執行事務是能夠保證資料庫的一致的,這就要求乙個事務排程要能夠轉化為等價的序列排程。若排程能夠轉化為乙個序列化排程,則說明排程是可序列化的。衝突可序列化和檢視可序列化是序列化的兩個概念。
衝突可序列化
事務中,對一資料項的操作無非是讀和寫,在進行排程時也只需要考慮讀和寫的衝突的情況。
1、各個指令對於不同的資料項的讀寫是不衝突的。
2、各個指令對相同的資料項的讀操作是不衝突的。
3、對於相同的資料項一部分指令讀而另一部分指令寫是衝突的。
4、各個指令對相同的資料項進行寫操作是衝突的。
也說是說,對相同的資料項進行操作時,至少有乙個指令是進行寫操作時,則是衝突的。
如果排程1可以經過一系統非衝突指令轉換為排程2,則說明排程1和排程2是衝突等價的。
若乙個排程s與乙個序列排程是衝突等價的,則稱排程s是衝突可序列化的。
檢視可序列化
檢視可序列化也衝突可序列化一樣,都是考慮對於資料項的讀寫操作,但其要求沒有衝突可序列化嚴格。
如果排程1和排程2滿足以下三個條件,則說明排程1和排程2是檢視等價的。
1、對於每個資料項q,若某個事務在排程1中讀取了q的初始值,由在排程2中也必須讀取q的初始值。
2、對於每個資料項q,若某個事務在排程1中讀取的值是另乙個事務t的一條寫指令產生的,則在排程2中讀取的值也必須是由事務t的相同寫指令產生的。
3、對於每個資料項q,若某個事務在排程1中執行了最後的寫操作,則在排程2中也必須執行最後的寫操作。
如果某個排程檢視與乙個序列排程等價,則說這個排程是檢視可序列化的。
可恢復性
可恢復排程
考慮排程有兩個事務的情形。如果事務1在對某個資料項q進行了寫操作後,事務2又對該資料項進行讀操作,而事務2提交後事務1出現了故障中止,因為事務2已經提交不能中止,這就造成了不一致狀態。如果有這一種情況出現,則說明該排程是不可恢復的。對於資料系統來說,要求所有的排程都是可恢復的。可恢復排程要求滿足:對事務1和事務2,如果事務2讀取了由事務1寫入的資料,則事務1必須先於事務2提交。
無級聯排程
對於可恢復排程中還可能出現這樣一種情況,當事務2讀取了事務1產生的資料後事務1出現了故障中止,這裡除了要對事務1進行回滾之外,也需要對事務2進行回滾,如果還有其它事務依賴於事務2產生的結果,則也需要回滾,這一現象稱為級聯回滾。級聯回滾導致大量的撤銷工作,在有的資料庫系統中會對其進行限制。無級聯回滾的除錯稱為無級聯排程。無級聯高度應滿足:如果事務2讀取了事務1所寫的資料項,則事務1必須在事務2讀取之前提交。
資料庫 事務
資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過將一組相關操作組合為乙個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠。乙個邏輯工作單元要成...
資料庫事務
這段時間面試,由於基礎不是特別好,遇到一些要筆試的公司。就會表示出來 今天有人問我,資料庫事務 是什麼。我只感覺十分熟悉。但是又說不出所以然。回來找了一下,現在整理記錄 1 定義 資料庫事務 database transaction 是指作為單個邏輯工作單元執行的一系列操作。事務處理可以確保除非事務...
資料庫事務
begin transaction 定義變數,用於累計事務執行過程中的錯誤 declare errorsum int set errorsum 0 初始化為0,即無錯誤 轉賬 張三的賬戶少1000元,李四的賬戶多1000元 update bank set currentmoney currentmo...