數據庫事務的四個特性
事務
(Transaction
)是由一系列對系統中數據進行訪問與更新的操作所組成的一個程序執行邏輯單元。
事務具有4個基本特徵,簡稱ACID
,分別是:
原子性Atomicity
一致性Consistency
隔離性Isolation
持久性Duration
01 原子性Atomicity
原子性
是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾,因此事務的操作如果成功就必須要麼完全應用到數據庫,如果操作失敗則不能對數據庫有任何影響。
- 事務被視爲不可分隔的最小單位。
02 一致性Consistency
一致性
是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。
- 在一致性狀態下,所有事務對一個數據的讀取結果都是相同的。
比如,A與B之間進行多次轉賬,但是A和B總共的錢是不變的。
03 隔離性Isolation
隔離性
是當多個用戶併發訪問數據庫時,多個併發事務之間要相互隔離,一個事務不應該影響其他其他事務運行效果。
- 同一時間,只允許一個事務請求同一數據,不同的事務之間彼此沒有任何干擾。
- 一個事務所做的修改在最終提交前,對其他事務是不可見的。
比如,A正在從一張銀行卡中取錢,在A取錢的過程結束前,B不能向這張卡轉賬。
不同的隔離級別:
Read Uncommitted 讀取未提交內容
- 最低的隔離級別,什麼都不需要做,一個事務可以讀到另一個事務未提交的結果。
- 所有的併發事務問題都會發生。
Read Committed 讀取提交內容
- 只有在事務提交後,其更新結果纔會被其他事務看見。
- 可以解決髒讀問題。
Repeated Read 可重複讀
- 在一個事務中,對於同一份數據的讀取結果總是相同的,無論是否有其他事務對這份數據進行操作,以及這個事務是否提交。
- 可以解決髒讀、不可重複讀。
Serialization 可串行化
- 事務串行化執行,隔離級別最高,犧牲了系統的併發性。
- 可以解決併發事務的所有問題。
04 持久性Durability
持久性
是指一個事務一旦被提交了,那麼對數據庫中的數據的改變就是永久性的,即便是在數據庫系統遇到故障的情況下也不會丟失提交事務的操作。