前言 從今天開始本系列就帶各位小伙伴學習資料庫技術。資料庫技術是Java開發中必不可少的一部分知識內容。也是非常重要的技術。本系列教程由淺入深, 全面講解資料庫體系。 非常適合零基礎的小伙伴來學習。 全文大約 【1707】 字,不說廢話,只講可以讓你學到技術、明白原理的純乾貨!本文帶有豐富案例及配圖 ...
前言
從今天開始本系列就帶各位小伙伴學習資料庫技術。資料庫技術是Java開發中必不可少的一部分知識內容。也是非常重要的技術。本系列教程由淺入深, 全面講解資料庫體系。 非常適合零基礎的小伙伴來學習。
全文大約 【1707】 字,不說廢話,只講可以讓你學到技術、明白原理的純乾貨!本文帶有豐富案例及配圖,讓你更好的理解和運用文中的技術概念,並可以給你帶來具有足夠啟迪的思考...
一. 事務
事務這個概念不太容易理解,所以我們通過下麵一個模擬轉賬的案例來讓各位小伙伴理解事務到底是什麼
1. 模擬轉賬
生活當中轉賬是轉賬方賬戶扣錢,收賬方賬戶加錢。我們用資料庫操作來模擬現實轉賬。
舉個慄子: 資料庫模擬轉賬。
#A 賬戶轉賬給 B 賬戶 1000 元。
#A 賬戶減1000 元
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;
#B 賬戶加 1000 元
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;
上述代碼完成了兩個賬戶之間轉賬的操作。
舉個慄子: 模擬轉賬錯誤。
#A 賬戶轉賬給 B 賬戶 1000 元。
#A 賬戶減1000 元
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;
#斷電、異常、出錯...
#B 賬戶加 1000 元
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;
上述代碼在減操作後過程中出現了異常或加錢語句出錯,會發現,減錢仍舊是成功的,而加錢失敗了!
註意: 每條 SQL 語句都是一個獨立的操作,一個操作執行完對資料庫是永久性的影響。
2. 事務的概念
事務是一個原子操作。是一個最小執行單元。可以由一個或多個SQL語句組成,在同一個事務當中,所有的SQL語句都成功執行時,整個事務成功,有一個SQL語句執行失敗,整個事務都執行失敗。
各位小伙伴是否理解了呢?那麼我們再做個小小的總結:
事務就是讓多個操作形成一個整體,在這個整體中的多個操作要麼執行全成功,要麼執行全失敗。這就是事務的作用。
3. 事務的執行過程
開始過程:連接到資料庫,執行一條DML語句。 上一個事務結束後,又輸入了一條DML語句,即事務的開始。
結束過程如下:
1).提交:
a.顯示提交:commit;
b.隱式提交:一條創建、刪除的語句,正常退出(客戶端退出連接)。
2).回滾:
a.顯示回滾:rollback;
b.隱式回滾:非正常退出(斷電、宕機),執行了創建、刪除的語句,但是失敗了,會為這個無效的語句執行回滾。
4. 事務的原理
資料庫會為每一個客戶端都維護一個空間獨立的緩存區(回滾段),一個事務中所有的增刪改語句的執行結果都會緩存在回滾段中,只有當事務中所有SQL語句均正常結束(commit),才會將回滾段中的數據同步到資料庫。否則無論因為哪種原因失敗,整個事務將回滾(rollback)。
5. 事務的特性
下麵給各位小伙伴系統的說一下事務都具有哪些特性和功能。
通常叫做ACID原則,因為ACID是由下麵四個單詞的首字母構成的。
Atomicity(原子性): 表示一個事務內的所有操作是一個整體,要麼全部成功,要麼全部失敗
Consistency(一致性) :表示一個事務內有一個操作失敗時,所有的更改過的數據都必須回滾到修改前狀態
Isolation(隔離性): 事務查看數據操作時數據所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會查看中間狀態的數據。
Durability(持久性): 持久性事務完成之後,它對於系統的影響是永久性的。
6. 事務應用
應用環境:基於增刪改語句的操作結果(均返回操作後受影響的行數),可通過程式邏輯手動控制事務提交或回滾。
舉個慄子: 事務完成轉賬,A賬戶給B賬戶轉賬。
#1.開啟事務
START TRANSACTION;|setAutoCommit=0;#禁止自動提交 setAutoCommit=1;#開啟自動提交
#2.事務內數據操作語句
UPDATE ACCOUNT SET MONEY = MONEY-1000 WHERE ID = 1;
UPDATE ACCOUNT SET MONEY = MONEY+1000 WHERE ID = 2;
#3.事務內語句都成功了,執行 COMMIT;
COMMIT;
#4.事務內如果出現錯誤,執行 ROLLBACK;
ROLLBACK;
註意: 開啟事務後,執行的語句均屬於當前事務,成功再執行 COMIIT,失敗要進行 ROLLBACK。
二. 結語
最後在這裡對本文核心要點進行總結:
-
事務能夠在增刪改操作中保證數據的一致性,所以在增刪改操作中必須加入事務。
-
各位小伙伴一定要熟練的記住事務的操作過程以及ACID原則,非常重要哦。