資料庫事務

2021-06-14 01:46:04 字數 2504 閱讀 6564

事件是訪問並可能更新各種資料項的乙個程式執行單元。事件由事務開始與事務結束之間執行的全體操作組成。為了保證資料完整性,資料庫系統需要維護事務的以下性質:

原子性(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...