原子性、一致性、分離性、持久性
(1) 原子性:對數據庫的修改全執行或全不執行
? 事務的原子性指的是,事務中包含的程序做爲數據庫的邏輯工做單位,它所作的對數據修改操做要麼所有執行,要麼徹底不執行。這種特性稱爲原子性。
? 事務的原子性要求,若是把一個事務可看做是一個程序,它要麼完整的被執行,要麼徹底不執行。就是說事務的操縱序列或者徹底應用到數據庫或者徹底不影響數據庫。這種特性稱爲原子性。
假如用戶在一個事務內完成了對數據庫的更新,這時全部的更新對外部世界必須是可見的,或者徹底沒有更新。前者稱事務已提交,後者稱事務撤消(或流產)。DBMS必 須確保由成功提交的事務完成的全部操縱在數據庫內有徹底的反映,而失敗的事務對數據庫徹底沒有影響。數據庫
(2) 一致性:執行先後數據庫不可變
事務的一致性指的是在一個事務執行以前和執行以後數據庫都必須處於一致性狀態。這種特性稱爲事務的一致性。假如數據庫的狀態知足全部的完整性約束,就說該數據庫是一致的。
??一致性處理數據庫中對全部語義約束的保護。假如數據庫的狀態知足全部的完整性約束,就說該數據庫是一致的。例如,當數據庫處於一致性狀態S1時,對數據庫執行一個事務,在事務執行期間假定數據庫的狀態是不一致的,當事務執行結束時,數據庫處在一致性狀態S2。安全
(3) 分離性:不被事務看到
??分離性指併發的事務是相互隔離的。即一個事務內部的操做及正在操做的數據必須封鎖起來,不被其它企圖進行修改的事務看到。
分離性是DBMS針對併發事務間的衝突提供的安全保證。DBMS能夠經過加鎖在併發執行的事務間提供不一樣級別的分離。假如併發交叉執行的事務沒有任何控制,操縱相同的共享對象的多個併發事務的執行可能引發異常狀況。
??DBMS能夠在併發執行的事務間提供不一樣級別的分離。分離的級別和併發事務的吞吐量之間存在反比關係。較多事務的可分離性可能會帶來較高的衝突和較多的事務流產。流產的事務要消耗資源,這些資源必需要從新被訪問。所以,確保高分離級別的DBMS須要更多的開銷。併發
(4)持久性:數據改變永久的
??持久性意味着當系統或介質發生故障時,確保已提交事務的更新不能丟失。即一旦一個事務提交,DBMS保證它對數據庫中數據的改變應該是永久性的,耐得住任何系統故障。持久性經過數據庫備份和恢復來保證,持久性主要在於DBMS的恢復性能。性能
隔離級別:spa
√: 可能出現 ×: 不會出現對象
髒讀 | 不可重複讀 | 幻讀 | |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
一、髒讀(dirty read):一個事務能夠讀取另外一個還沒有提交事務的修改數據。事務
二、非重複讀(nonrepeatable read):在同一個事務中,同一個查詢在T1時間讀取某一行,在T2時間從新讀取這一行時候,這一行的數據已經發生修改,可能被更新了(update),也可能被刪除了(delete)。ci
三、幻讀(phantom read):在同一事務中,同一查詢屢次進行時候,因爲其餘插入操做(insert)的事務提交,致使每次返回不一樣的。資源