全文大約【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。
二. 結語
小編在這里對本文核心要點進行總結:
1.事務能夠在增刪改操作中保證數據的一致性,所以在增刪改操作中必須加入事務。
2.各位小伙伴一定要熟練的記住事務的操作過程以及ACID原則。