主記憶體資料庫系統/事務設計
目錄 —
第 7 章:事務管理
事務是包含許多資料庫操作的基本工作單元。事務要麼提交,要麼回滾。這意味著它應該決定是將所有更改提交給 DBMS,還是忽略所有更改並將資料庫狀態恢復到事務開始時的狀態。
為了恢復目的,DBMS 應該維護事務的狀態。事務狀態變化如下所示
- 事務開始
- 資料庫操作(INSERT、UPDATE、DELETE、SELECT)
- 提交或中止
資料庫操作包括讀取和修改資料記錄。執行 SELECT 語句的效果是讀取,執行 INSERT、UPDATE 和 DELETE 的效果是修改資料記錄。
提交操作通知事務管理器事務已成功結束。提交操作後,資料庫應該處於一致狀態,該事務進行的所有更新都應該永久生效。
回滾或中止操作通知事務管理器事務中某個操作出錯,並且資料庫處於不一致狀態。必須對資料庫撤銷該事務所做的所有更新,以將其恢復到以前的一致狀態;即該事務開始時的狀態。
BEGIN TRANSACTION;
讀取賬戶 1 餘額
如果讀取失敗,轉到 UNDO;
從賬戶 1 餘額中減少 100 元
如果減少失敗,轉到 UNDO;
讀取賬戶 2 餘額
如果讀取失敗,轉到 UNDO;
在賬戶 2 餘額中增加 100 元
如果增加失敗,轉到 UNDO;
COMMIT;
轉到 FINISH;
UNDO
ROLLBACK;
FINISH
RETURN;
事務處理保證四個重要屬性(稱為 ACID 屬性)
原子性 — 每個事務都被視為要麼全部完成,要麼全部不完成 - 它要麼提交,要麼中止。如果事務提交,則其所有效果都將保留。如果它中止,則所有效果都將被撤銷。
一致性 — 事務保持資料一致性;它始終將資料庫從一種一致狀態轉變為另一種一致狀態。中間狀態可能不一致,但提交或回滾操作應再次將資料庫帶到另一個新的狀態或返回到舊的 一致狀態。
隔離性 — 事務應該彼此隔離。即使所有事務都並行執行,一個事務所做的更新也不應該在其他事務提交之前對其他事務可見,反之亦然。
永續性 — 事務提交應確保其更新存在於資料庫中,即使發生後續的系統崩潰也是如此。
如果事務在沒有其他事務或系統錯誤的情況下執行,並且它從一致狀態的資料庫開始,則當事務結束時資料庫也處於一致狀態。這意味著,如果我們控制併發事務和系統錯誤,事務始終確保正確性。前者由併發管理器控制,後者由日誌和恢復管理器控制。