目錄
MySQL事務處理
什麼是事務
事務是由一組SQL語句組成的邏輯處理單元。
事務的四大特性
ACID
原子性(Atomicity)
事務是一個原子操作單元,其對數據的修改,要麼全部執行,要麼全都不執行。
一致性(Consistent)
在事務開始和完成時,數據都必須保持一致狀態。
隔離性(Isolation)
數據庫系統提供一定的隔離機制,保證事務在不受外部併發操作影響的“獨立”環境執行,這意味着事務處理過程中的中間狀態對外部是不可見的,反之亦然。
持久性(Durable)
事務完成之後,他對於數據的修改是永久性的,即使出現系統故障也能夠保持。
事務舉例
多事務執行方式
多請求多操作時應該如何處理:
串行執行
最簡單的處理方式,代表同一時間只有一個事務執行,如果有四件事,需要做一個隊列,誰先進隊列處理誰,一個一個來。
比如,開了一個窗口的銀行,然後取票排隊處理業務。
特點
- 同一時間只有一個事務執行
- 效率低,無法充分利用資源
交叉併發執行
比如:a客戶填表,b客戶可以處理業務。b客戶處理完,b去填表,a處理業務。
利用任務等待時間,交叉併發執行。
特點
- 多事務交叉運行
- 單處理器的併發方式
同時併發執行
比如:銀行開多個窗口,每個窗口都能處理客戶的業務,效率最高。
就像計算機多核,就可以處理多個運算。
特點
- 多處理器系統中使用
- 每個處理器處理一個事務
併發執行導致的問題
- 併發勢必面臨“同讀同寫”問題;
- “同讀同寫”導致破壞事務隔離性和數據不一致;
什麼是數據不一致
丟失修改(lost update)
丟失修改是指事務1與事務2從數據庫中讀入同一數據並修改。事務2的提交結果破壞了事務1提交的結果,導致事務1的修改被丟失;
不可重複讀(non-repeatable read)
不可重複讀是指事務1讀取數據後,事務2執行更新操作,使事務1無法再現前一次的讀取結果。
讀“髒數據”(dirty read)
讀“髒”數據是指事務1修改某一數據並寫回,然後事務2讀取該數據。事務1由於某種原因被撤銷,數據恢復原值。導致事務2讀取的數據爲錯誤數據,也就是“髒數據”。
併發控制
- 對併發操作進行正確正確調度;
- 保證事務的隔離性;
- 保證數據的一致性;