乙個事務本質上有四個特點acid:
原子性
一致性
隔離性
耐久性
事務中各項操作,要麼全做要麼全不做,任何一項操作的失敗都會導致整個事務的失敗,就像原子一樣不可分割;
事務結束後系統狀態是一致的;乙個事務可以封裝狀態改變(除非它是乙個唯讀的)。
事務必須始終保持系統處於一致的狀態,不管在任何給定的時間併發事務有多少。
舉個例子:如果事務是併發多個,系統也必須如同序列事務一樣操作。其主要特徵是保護性和不變性(preserving an invariant),以轉賬案例為例,假設有五個賬戶,每個賬戶餘額是100元,那麼五個賬戶總額是500元,如果在這個5個賬戶之間同時發生多個轉賬,無論併發多少個,比如在a與b賬戶之間轉賬5元,在c與d賬戶之間轉賬10元,在b與e之間轉賬15元,五個賬戶總額也應該還是500元,這就是保護性和不變性。
併發執行的事務彼此無法看到對方的中間狀態;
隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,執行在相同的時間內,執行相同的功能,事務的隔離性將確保每一事務在系統中認為只有該事務在使用系統。這種屬性有時稱為序列化,為了防止事務操作間的混淆,必須序列化或序列化請求,使得在同一時間僅有乙個請求用於同一資料。
事務完成後所做的改動都會被持久化,即使發生災難性的失敗。通過日誌和同步備份可以在故障發生後重建資料。
在事務完成以後,該事務對資料庫所作的更改便持久的儲存在資料庫之中,並不會被回滾。
由於一項操作通常會包含許多子操作,而這些子操作可能會因為硬體的損壞或其他因素產生問題,要正確實現acid並不容易。acid建議資料庫將所有需要更新以及修改的資料一次操作完畢,但實際上並不可行。
目前主要有兩種方式實現acid:第一種是write ahead logging,也就是日誌式的方式(現代資料庫均基於這種方式)。第二種是shadow paging。
相對於wal(write ahead logging)技術,shadow paging技術實現起來比較簡單,消除了寫日誌記錄的開銷恢復的速度也快(不需要redo和undo)。
shadow paging的缺點就是事務提交時要輸出多個塊,這使得提交的開銷很大,而且以塊為單位,很難應用到允許多個事務併發執行的情況——這是它致命的缺點。
wal 的中心思想是對資料檔案 的修改(它們是表和索引的載體)必須是只能發生在這些修改已經 記錄了日誌之後 -- 也就是說,在日誌記錄沖刷到永久儲存器之後.
如果我們遵循這個過程,那麼我們就不需要在每次事務提交的時候 都把資料頁沖刷到磁碟,因為我們知道在出現崩潰的情況下, 我們可以用日誌來恢復資料庫:
任何尚未附加到資料頁的記錄 都將先從日誌記錄中重做(這叫向前滾動恢復,也叫做 redo) 然後那些未提交的事務做的修改將被從資料頁中刪除 (這叫向後滾動恢復 - undo)。
資料庫事務ACID
1.原子性 atomicity 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。2.一致性 consistency 事務必須使資料庫從乙個一致性狀態變換到另外乙個一致性狀態。3.隔離性 isolation 事務的隔離性是指乙個事務的執行不能被其他事務干擾,即乙個事務內部...
資料庫事務 ACID
資料庫事務 acid 1.原子性 atomicity 乙個事務必須被視為乙個不可分割的最小工作單元,整個事務中的所有操作要麼全部提交成功,要麼全部失敗回滾。對於乙個事務來說,不可能只執行其中的一部分操作,這就是事物的原子性。2.一致性 consistency 資料庫總是從乙個一致性的狀態轉換到另外乙...
資料庫事務 ACID
事務 乙個操作,乙個要執行sql語句,要麼執行,要麼不執行,是乙個不可分割的工作單位。有如下特性 a 原子性 atomicity c 一致性 consistency i 隔離性 isolation d 永續性 durability 先理解資料庫的一致性 參考這篇部落格 考慮如下場景 公司給員工發工資...