
- 關係資料庫設計
- DBMS - 資料庫規範化
- DBMS - 資料庫連線
- 儲存和檔案結構
- DBMS - 儲存系統
- DBMS - 檔案結構
- 事務和併發
- DBMS - 事務
- DBMS - 併發控制
- DBMS - 死鎖
- 備份和恢復
- DBMS - 資料備份
- DBMS - 資料恢復
- DBMS 有用資源
- DBMS - 快速指南
- DBMS - 有用資源
- DBMS - 討論
DBMS - 事務
事務可以定義為一組任務。單個任務是最小的處理單元,不能再細分。
讓我們來看一個簡單的交易示例。假設銀行職員將 500 盧比從 A 的賬戶轉到 B 的賬戶。這個非常簡單的小型交易涉及多個低階任務。
A 的賬戶
Open_Account(A) Old_Balance = A.balance New_Balance = Old_Balance - 500 A.balance = New_Balance Close_Account(A)
B 的賬戶
Open_Account(B) Old_Balance = B.balance New_Balance = Old_Balance + 500 B.balance = New_Balance Close_Account(B)
ACID 屬性
事務是程式中非常小的單元,它可能包含多個低階任務。資料庫系統中的事務必須維護原子性、一致性、隔離性和永續性——通常稱為 ACID 屬性——以確保準確性、完整性和資料完整性。
原子性 - 此屬性規定必須將事務視為原子單元,即要麼執行其所有操作,要麼不執行任何操作。資料庫中一定不能存在事務部分完成的狀態。狀態應在事務執行之前或事務執行/中止/失敗之後定義。
一致性 - 任何事務後,資料庫都必須保持一致狀態。任何事務都不應對資料庫中駐留的資料產生任何不利影響。如果資料庫在事務執行之前處於一致狀態,則在事務執行之後也必須保持一致狀態。
永續性 - 資料庫應該足夠持久,即使系統發生故障或重啟也能儲存所有最新的更新。如果事務更新資料庫中的一塊資料並提交,則資料庫將儲存修改後的資料。如果事務提交但系統在資料寫入磁碟之前發生故障,則系統恢復執行後將更新該資料。
隔離性 - 在資料庫系統中,多個事務同時並行執行時,隔離性屬性規定所有事務都將被執行,就好像它是系統中唯一的事務一樣。任何事務都不會影響任何其他事務的存在。
可序列化
當多個事務在多程式設計環境中由作業系統執行時,可能存在一個事務的指令與其他事務的指令交錯的情況。
排程 - 事務的按時間順序執行序列稱為排程。排程中可以有多個事務,每個事務包含許多指令/任務。
序列排程 - 這是一種排程,其中事務以一種方式對齊,即一個事務首先執行。當第一個事務完成其週期後,則執行下一個事務。事務一個接一個地排序。這種型別的排程稱為序列排程,因為事務以序列方式執行。
在多事務環境中,序列排程被視為基準。事務中指令的執行順序不能更改,但是兩個事務可以以隨機方式執行其指令。如果兩個事務相互獨立並在資料的不同段上工作,則此執行不會造成任何損害;但是,如果這兩個事務正在處理相同的資料,則結果可能會有所不同。這種不斷變化的結果可能會使資料庫處於不一致的狀態。
為了解決這個問題,如果其事務是可序列化的或它們之間存在某種等價關係,我們允許並行執行事務排程。
等價排程
等價排程可以是以下型別:
結果等價
如果兩個排程在執行後產生相同的結果,則稱它們是結果等價的。它們可能對某些值產生相同的結果,而對另一組值產生不同的結果。這就是為什麼這種等價通常不被認為很重要。
檢視等價
如果兩個排程中的事務以類似的方式執行類似的操作,則這兩個排程將是檢視等價的。
例如:
如果 T 在 S1 中讀取初始資料,則它也在 S2 中讀取初始資料。
如果 T 讀取 J 在 S1 中寫入的值,則它也讀取 J 在 S2 中寫入的值。
如果 T 在 S1 中對資料值執行最終寫入,則它也在 S2 中對資料值執行最終寫入。
衝突等價
如果兩個排程具有以下屬性,則它們將是衝突的:
- 兩者都屬於單獨的事務。
- 兩者都訪問相同的資料項。
- 兩者中至少一個是“寫入”操作。
具有包含衝突操作的多個事務的兩個排程被稱為衝突等價,當且僅當:
- 兩個排程都包含相同的交易集。
- 兩個排程中都保持衝突操作對的順序。
注意 - 檢視等價排程是檢視可序列化的,衝突等價排程是衝突可序列化的。所有衝突可序列化排程也是檢視可序列化的。
事務狀態
資料庫中的事務可以處於以下狀態之一:

活動 - 在此狀態下,正在執行事務。這是每個事務的初始狀態。
部分提交 - 當事務執行其最終操作時,據說它處於部分提交狀態。
失敗 - 如果資料庫恢復系統進行的任何檢查失敗,則事務據說處於失敗狀態。失敗的事務無法繼續進行。
中止 - 如果任何檢查失敗並且事務已到達失敗狀態,則恢復管理器將撤消其在資料庫上的所有寫入操作,以使資料庫恢復到事務執行之前的原始狀態。處於此狀態的事務稱為中止的事務。資料庫恢復模組可以在事務中止後選擇以下兩個操作之一:
- 重新啟動事務
- 終止事務
已提交 - 如果事務成功執行所有操作,則稱其已提交。其所有效果現在已永久建立在資料庫系統中。