數據庫事務
四大特性
原子性 隔離性 持久性 一致性
原子性
一個事務的多個數據庫操作是一個不可分割的原子單元,只有所有的操作執行成功,整個事務才提交。
一致性
事務操作成功後,數據庫所處的狀態和他的業務規則是一致的,即數據不會被破壞。如A賬戶轉賬100元到B賬戶,不管操作成功與否,A和B賬戶的存款總額是不變的。
隔離性
事務之間有一定的隔離級別,保障不同程度的數據一致性。
持久性
一旦事務提交成功後,事務中所有的數據都被持久化到數據庫中。
隔離帶來的問題及對應的解決級別
-
丟失更新
第一類
最低的隔離級別Read uncommited即可防止此問題,對應一級封鎖協議是:事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放。事務結束包括正常結束(COMMIT)和非正常結束(ROLLBACK)。
第二類
此類問題只能通過可以通過樂觀鎖或悲觀鎖進行控制。
-
髒讀
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-k8wiVjy8-1583551659525)(images\髒讀.png)]
髒讀的解決方案:設置隔離級別爲讀已提交。對應的封鎖協議:一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,讀完後即可釋放S鎖(瞬間S鎖)。 -
不可重複讀
不可重複讀的解決方案:設置隔離級別爲可重複讀。對應的封鎖協議:一級封鎖協議加上事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放。
- 幻讀
幻讀的解決方案:序列化。它要求事務序列化執行,事務只能一個接着一個地執行,但不能併發執行。