關系數據庫 --- 事務
事務遵循ACID規則
1,A (Atomicity) 原子性
原子性指的是事務作為一個最小的執行單位不可分割,一個事務里面的操作要么全部做完,要么全部不做, 只要一個操作失敗全部 ROLLBACK
理解案例:我們進行一次銀行轉賬(一個事務):A轉10000元給B . 銀行系統會執行的操作理應是從A 銀行賬戶扣10000(操作一),給B的賬戶加10000(操作二),那如果因為網絡中斷,系統故障或者其他任何原因只執行了操作一那么導致結果是A 的賬戶少了10000元但是B 的賬戶 不會有任何改變.顯然這樣的事情是不能發生的.
結論: 關系型數據庫事務應該遵循原子性原子規則,事務內的無論有多少操作都應該是 同生共死要么全部成功,要么全部失敗
ps: 關系型數據庫以理解關系為主,原子性也可以理解為事務和其內部操作的關系.
2,C (Consistency)一致性
一致性指的是事務的運行中數據庫要保持一致的狀態事務的運行不會改變數據庫原本的一致性約束
理解案例:我們數據庫用有一個用戶表,一般用戶理應由以下字段及字段約束
id: (primary key, not null, INTEGER) name:(not null,CHAR) password(not nul,CHARl)
表內有這樣一個用戶
id : 1 , name: xiaoyuan ,password: 122345678
假設我們現在提交一個事務為刪除用戶xiaoyuan 的用戶名會發生什么呢?
表結構字段約束中name 為非空, 如果一個用戶的name 字段為空那么直接會導致數據庫的錯誤
結論:關系型數據庫事務應該遵循一致性的原則,即事務的提交一定要遵循數據庫本身結構
ps:會有人理不清原子性和一致性的區別,一致性也可以理解為事務和數據庫之間的關系
3 ,I(Isolation)隔離性
隔離性是對同一個資源操作的事務,是系統在給定時間內執行的唯一操作。
理解案例:
假定A 先生有銀行卡有10000元現在花5000元去買一台電腦,在同一時間A的老婆用同一賬戶的副卡要花6000元買一個包包,正常情況下10000元是不能變成11000元的,但是數據庫在同一時間內有可能會存在一個資源經搶奪問題,即同一時間兩個事務取讀A 銀行卡余額都是10000在同時去支付兩個交易都能支付成功,銀行是不願意發生這種事情的
結論: 關系數據庫事務應該有隔離性,不同事務不能同時對一個資源進行操作
ps:隔離性也可以理解為事務和事務之間的關系
4,D (Durability)持久性
持久性是最容易理解的,事務一旦提交,數據就永久安全的保存到磁盤中
理解案例:A 先生 在銀行賬戶中有10000元老婆買包包用了10000余額0,第二天銀行系統更新卡內余額又回到了三天前的狀態又可以買電腦了,顯然這個A 的臆想