一、簡述
事務的四大特性為原子性,一致性,隔離性,持久性,其概念分別如下:
⑴ 原子性(Atomicity)
原子性是指事務包含的所有操作要么全部成功,要么全部失敗回滾,這和前面兩篇博客介紹事務的功能是一樣的概念,因此事務的操作如果成功就必須要完全應用到數據庫,如果操作失敗則不能對數據庫有任何影響。
⑵ 一致性(Consistency)
一致性是指事務必須使數據庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之后都必須處於一致性狀態。
⑶ 隔離性(Isolation)
隔離性是當多個用戶並發訪問數據庫時,比如操作同一張表時,數據庫為每一個用戶開啟的事務,不能被其他事務的操作所干擾,多個並發事務之間要相互隔離。
即要達到這么一種效果:對於任意兩個並發的事務T1和T2,在事務T1看來,T2要么在T1開始之前就已經結束,要么在T1結束之后才開始,這樣每個事務都感覺不到有其他事務在並發地執行。
⑷ 持久性(Durability)
持久性是指一個事務一旦被提交了,那么對數據庫中的數據的改變就是永久性的,即便是在數據庫系統遇到故障的情況下也不會丟失提交事務的操作。
二、舉例說明
這四個概念其實比較抽象,脫離具體事務來講比較難理解,為了幫助理解,我們可以引用具體的實例幫助我們理解
首先我們創造一張表
一列是用戶表,一列是金額表
ID | user | money |
1 | A | 1000 |
2 | B | 1000 |
⑴ 原子性(Atomicity)
比如我們現在有一個任務要讓A賬戶向B賬戶轉100元,那么我們就需要執行兩句
第一個是A賬戶-100第二個是B賬戶+100
原子性就是保證這兩條數據要么都成功要不都不成功,如果成功一般那么就會出現總數多出100或者少100這樣就會造成顧客損失或者公司損失,所以出現不成功或者成果一半就要回滾
⑵ 一致性(Consistency)
拿轉賬來說,假設用戶A和用戶B兩者的錢加起來一共是5000,那么不管A和B之間如何轉賬,轉幾次賬,事務結束后兩個用戶的錢相加起來應該還得是5000,這就是事務的一致性。
⑶ 隔離性(Isolation)
比如一個人A在發出轉賬請求時,B去同時查看兩個賬戶余額,B要不看見都是轉賬前的狀態 都是1000塊,要不看到的都是轉賬后的狀態,一個900一個1100,而不會看到一個900一個1000或者一個1000一個1100這種中間狀態。
關於事務的隔離性數據庫提供了多種隔離級別,稍后會介紹到。
⑷ 持久性(Durability)
例如我們在使用JDBC操作數據庫時,在提交事務方法后,提示用戶事務操作完成,當我們程序執行完成直到看到提示后,就可以認定事務以及正確提交,即使這時候數據庫出現了問題,也必須要將我們的事務完全執行完成,否則就會造成我們看到提示事務處理完畢,但是數據庫因為故障而沒有執行事務的重大錯誤。