全文大約【1707】字,不說廢話,只講可以讓你學(xué)到技術(shù)、明白原理的純干貨!本文帶有豐富案例及配圖視頻,讓你更好的理解和運(yùn)用文中的技術(shù)概念,并可以給你帶來具有足夠啟迪的思考......
一. 事務(wù)
事務(wù)這個概念不太容易理解,所以小編通過下面一個模擬轉(zhuǎn)賬的案例來讓各位小伙伴理解事務(wù)到底是什么。
1.模擬轉(zhuǎn)賬
生活當(dāng)中轉(zhuǎn)賬是轉(zhuǎn)賬方賬戶扣錢,收賬方賬戶加錢。我們用數(shù)據(jù)庫操作來模擬現(xiàn)實(shí)轉(zhuǎn)賬。
舉個栗子:數(shù)據(jù)庫模擬轉(zhuǎn)賬。
#A 賬戶轉(zhuǎn)賬給 B 賬戶 1000 元。
#A 賬戶減1000 元
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;
#B 賬戶加 1000 元
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;
上述代碼完成了兩個賬戶之間轉(zhuǎn)賬的操作。
舉個栗子:模擬轉(zhuǎn)賬錯誤。
#A 賬戶轉(zhuǎn)賬給 B 賬戶 1000 元。
#A 賬戶減1000 元
UPDATE account SET MONEY = MONEY-1000 WHERE id=1;
#斷電、異常、出錯...
#B 賬戶加 1000 元
UPDATE account SET MONEY = MONEY+1000 WHERE id=2;
上述代碼在減操作后過程中出現(xiàn)了異?;蚣渝X語句出錯,會發(fā)現(xiàn),減錢仍舊是成功的,而加錢失敗了!
注意:每條 SQL 語句都是一個獨(dú)立的操作,一個操作執(zhí)行完對數(shù)據(jù)庫是永久性的影響。
2. 事務(wù)的概念
事務(wù)是一個原子操作。是一個最小執(zhí)行單元。可以由一個或多個SQL語句組成,在同一個事務(wù)當(dāng)中,所有的SQL語句都成功執(zhí)行時,整個事務(wù)成功,有一個SQL語句執(zhí)行失敗,整個事務(wù)都執(zhí)行失敗。
各位小伙伴是否理解了呢?那么小編再做個小小的總結(jié):
事務(wù)就是讓多個操作形成一個整體,在這個整體中的多個操作要么執(zhí)行全成功,要么執(zhí)行全失敗。這就是事務(wù)的作用。
3. 事務(wù)的執(zhí)行過程
開始過程:連接到數(shù)據(jù)庫,執(zhí)行一條DML語句。 上一個事務(wù)結(jié)束后,又輸入了一條DML語句,即事務(wù)的開始。
結(jié)束過程如下:
1).提交:
a.顯示提交:commit;
b.隱式提交:一條創(chuàng)建、刪除的語句,正常退出(客戶端退出連接)。
2).回滾:
a.顯示回滾:rollback;
b.隱式回滾:非正常退出(斷電、宕機(jī)),執(zhí)行了創(chuàng)建、刪除的語句,但是失敗了,會為這個無效的語句執(zhí)行回滾。
4. 事務(wù)的原理
數(shù)據(jù)庫會為每一個客戶端都維護(hù)一個空間獨(dú)立的緩存區(qū)(回滾段),一個事務(wù)中所有的增刪改語句的執(zhí)行結(jié)果都會緩存在回滾段中,只有當(dāng)事務(wù)中所有SQL語句均正常結(jié)束(commit),才會將回滾段中的數(shù)據(jù)同步到數(shù)據(jù)庫。否則無論因?yàn)槟姆N原因失敗,整個事務(wù)將回滾(rollback)。
5. 事務(wù)的特性
下面小編給各位小伙伴系統(tǒng)的說一下事務(wù)都具有哪些特性和功能。通常叫做ACID原則,因?yàn)锳CID是由下面四個單詞的首字母構(gòu)成的。
Atomicity(原子性):表示一個事務(wù)內(nèi)的所有操作是一個整體,要么全部成功,要么全部失敗
Consistency(一致性):表示一個事務(wù)內(nèi)有一個操作失敗時,所有的更改過的數(shù)據(jù)都必須回滾到修改前狀態(tài)
Isolation(隔離性):事務(wù)查看數(shù)據(jù)操作時數(shù)據(jù)所處的狀態(tài),要么是另一并發(fā)事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會查看中間狀態(tài)的數(shù)據(jù)。
Durability(持久性):持久性事務(wù)完成之后,它對于系統(tǒng)的影響是永久性的。
6. 事務(wù)應(yīng)用
應(yīng)用環(huán)境:基于增刪改語句的操作結(jié)果(均返回操作后受影響的行數(shù)),可通過程序邏輯手動控制事務(wù)提交或回滾。
舉個栗子:事務(wù)完成轉(zhuǎn)賬,A賬戶給B賬戶轉(zhuǎn)賬。
#1.開啟事務(wù)
START TRANSACTION;|setAutoCommit=0;#禁止自動提交 setAutoCommit=1;#開啟自動提交
#2.事務(wù)內(nèi)數(shù)據(jù)操作語句
UPDATE ACCOUNT SET MONEY = MONEY-1000 WHERE ID = 1;
UPDATE ACCOUNT SET MONEY = MONEY+1000 WHERE ID = 2;
#3.事務(wù)內(nèi)語句都成功了,執(zhí)行 COMMIT;
COMMIT;
#4.事務(wù)內(nèi)如果出現(xiàn)錯誤,執(zhí)行 ROLLBACK;
ROLLBACK;
注意:開啟事務(wù)后,執(zhí)行的語句均屬于當(dāng)前事務(wù),成功再執(zhí)行 COMIIT,失敗要進(jìn)行 ROLLBACK。
二. 結(jié)語
小編在這里對本文核心要點(diǎn)進(jìn)行總結(jié):
1.事務(wù)能夠在增刪改操作中保證數(shù)據(jù)的一致性,所以在增刪改操作中必須加入事務(wù)。
2.各位小伙伴一定要熟練的記住事務(wù)的操作過程以及ACID原則。