資料庫事務,簡稱事務,是一組按順序執行的操作單元。
事務有四個特徵,稱為 acid:
比如,atm 取錢和記入客戶賬戶是乙個原子事務。如果 atm 只是吐出錢,而未記入賬戶,或是已記入賬戶,但沒有吐出錢。這兩種情況都是不允許的。
事務必須以一種遵循系統規則的方式,成功地選擇、插入、更新或刪除記錄。不遵循規則的事務,不能提交。如果沒有絕對的規則,則永續性(資料完整性)將沒***。比如,航班資料庫,乙個座位不能分配給兩名不同的乘客。這就是乙個一致性。在事務處理過程中的某個時刻,乘客之間可能需要調換座位,這可能會違背這個約束。但事務結束後,事務必須保證資料庫滿足所有的一致性條件。
事務併發時,乙個事務不應影響其他事務。事務之間是隔離的。比如,兩個機票售票口,正在**同乙個航班的座位,而該航班只剩下乙個座位,那麼,只能滿足乙個售票口的請求,而拒絕另乙個。如果由於併發操作而導致同乙個座位賣給了兩位乘客,或是沒賣出去,都是不允許的。
事務一旦被提交,即使系統出現故障,也要保證事務的結果不能丟失。許多災難性條件可能導致記錄無法永久性儲存到磁碟,包括電源、網路、系統和硬碟等裝置的失敗。資料丟失還可能由於心懷不滿的員工或黑客的惡意操作引起。
但是,永續性不是自動化過程。dba的主要職責之一就是建立並維護資料恢復策略。
james nicholas gray、theo haerder 和 andreas reuter 這三人為術語「資料庫 acid 測試」做出了很大貢獻。
如果對併發操作不進行合理排程,那麼,會破壞事務 acid 特性。可能會帶來如下問題:
例如,假設,兩個事務 t1 和 t2:
事務 t1 和 t2 都從資料庫讀入同一記錄,並各自修改資料,在兩個事務都完成了讀入資料的操作以後,t1 先完成修改操作,並將更新的資料寫回資料庫。
隨後,t2 也完成了修改,並將結果寫回資料庫,這樣就覆蓋了 t1 的操作結果,導致 t1 對該資料的修改好像從未發生過。
這種情形稱為「丟失修改」。
例如,假設,兩個事務 t1 和 t2:
事務 t1 修改了某個資料,並將其寫回資料庫。事務 t2 隨之讀入這個被 t1 修改過的資料,之後 t1 出於某種原因又撤銷了,它所修改的資料被恢復。
這時,t2 所讀取的資料就與資料庫中的資料不同。
這種情形稱為「髒讀取」。
例如,假設,兩個事務 t1 和 t2:
事務 t1 按一定條件從資料庫讀取某些資料。隨後,事務 t2 對其進行修改,並將其結果寫回資料庫。當 t1 再次按同一條件讀取資料時,結果發現已經跟剛才不一樣了。有些可能發生改變,有些可能已經刪除,還可能增加了某些資料。
這種情況稱為「不可重複讀取」。
為了解決事務之間併發帶來的問題,必須在事務之間建立隔離關係。如果應用程式使用完全隔離的事務,那麼,同時執行多個事務的效果將完全等效於序列(乙個接乙個地)執行。隔離級別如下表所示。
隔離級別
髒讀不可重複讀取
影子讀取
描述可序列化
(serializable)
不可能不可能
不可能最嚴格的級別。事務序列執行,資源消耗最大
可重複讀取
(repeatable read)
不可能不可能
可能讀取資料的事務允許其他事務繼續訪問該行資料,但未提交的寫事務將會禁止其他事務訪問該行。避免「髒讀取」和「不可重複讀取」,只是帶來更多的效能損失
未提交讀取
(read uncommited)
不可能可能
可能最低的事務隔離級別,保證讀取過程中不會讀取到非法資料
提交讀取
(read committed)
可能可能
可能大多數主流資料庫的預設事務等級,保證了乙個事務不會讀到另乙個並行事務已修改但未提交的資料,避免了「髒讀取」。該級別適用於大多數系統
資料庫採用鎖機制來實現事務隔離。
例如,事務 t 對資料 a 加了 s 鎖,則 t 就可以對 a 進行讀取,但不能修改;在 t 釋放 a 上的 s 鎖前,其他事務可以再對 a 加 s 鎖,但不能加 x 鎖,這樣,可以讀取 a,但不能修改 a。
例如,若事務 t 對資料 a 加了 x 鎖,則 t 就可以對 a 進行讀取,以及修改 a;在 t 釋放 a 上的 x 鎖前,任何事務都不能對 a 加任何型別的鎖,這樣也就不能讀取和修改 a。
為了保證併發控制的正確性,在使用加鎖機制時,必須遵循一定原則,如何時申請 x 鎖或 s 鎖,何時釋放鎖等。不同的加鎖協議(locking protocol)約定不同——保證資料一致性的**鎖協議和保證並行排程的兩段鎖(two-phase locking)協議,為併發提供不同程度的保證。
資料庫事務的概念
一 什麼是事務 事務是訪問資料庫的乙個操作序列,資料庫應用系統通過事務集來完成對資料庫的訪問。事務的正確執行使得資料庫從一種狀態轉換成另一種狀態。事務必須服從iso iec所制定的acid原則。acid是原子性 atomicity 一致性 consistency 隔離性 isolation 和永續性...
回憶資料庫
1.緒論 本科讀書那會開始學資料庫,研究生開始搞大資料和機器學習,一直到參加各種面試,發現資料庫真是太重要了,更有甚者是現在在一家大資料公司從事資料探勘,了解了很多的大資料產品,基本上當我們使用工具去訪問資料的時候,其操作方式主要有以下幾種 是提供終端介面 dos視窗或者linux終端 利用sql語...
資料庫事務概念及特性
事務結束於 執行commit或rollback語句 執行一條ddl語句,例如create table語句 在這種情況下,會自動執行commit語句 執行一條dcl語句,例如grant語句,在這種情況下,會自動執行commit語句 斷開與資料庫的連線 執行一條dml語句,該語句卻失敗了,在這種情況下,...