小伙伴們不好意思订框,這兩天有事沒有及時的更新哈~
希望小伙伴們見諒漱挚,那么開始我們今天的分享遏餐。
MySQL 數(shù)據(jù)庫的事務(wù)
我們之前分享數(shù)據(jù)庫的數(shù)據(jù)操作雾消,無外乎對數(shù)據(jù)庫的數(shù)據(jù)進行增、刪泄伪、改殴蓬、查。就比如我們?nèi)ベI東西蟋滴,一般都是先付錢染厅,賣家收到錢再發(fā)貨。這個用數(shù)據(jù)庫來表示就是津函,第一步:從用戶的賬戶中減去一部分金額肖粮。第二步,再把減去的金額添加到商家的賬戶上尔苦。
但是萬一遇到特殊的情況涩馆,你成功的完成了第一步,從用戶的數(shù)據(jù)庫中扣除了錢允坚,這時候突然停電魂那,系統(tǒng)出現(xiàn)了故障,沒有完成第二步稠项。這就尷尬了涯雅,用戶的錢少了,商家也沒收到錢展运。
為了應(yīng)對這種情況的發(fā)生斩芭,數(shù)據(jù)庫就出現(xiàn)了一個功能事務(wù),事務(wù)就是一組由 SQL 語句組成的業(yè)務(wù)邏輯乐疆,當(dāng)事務(wù)內(nèi)的所有 SQL語句都成功的執(zhí)行,整個事務(wù)才算成功贬养,否則就是失敗挤土。失敗意味著整個的數(shù)據(jù)操作沒有意義,就要把數(shù)據(jù)恢復(fù)到執(zhí)行事務(wù)操作之前的狀態(tài)误算。
上面是關(guān)于事務(wù)的介紹仰美,下面我們用具體的代碼演示一下:
SQL語句在執(zhí)行的過程中分為二個階段:
1 : 執(zhí)行SQL語句
2 : 將執(zhí)行結(jié)果提交給數(shù)據(jù)庫迷殿。
現(xiàn)在我們來演示一下:修改 id=3 的用戶的手機號碼,使之變成 {{123456:0}}
我們看見這個修改操作已經(jīng)完成了咖杂,我們來看一下事務(wù)默認(rèn)的執(zhí)行方式庆寺。
show variables like 'autocommit';
事務(wù)默認(rèn)的執(zhí)行方式:自動提交。SQL語句執(zhí)行完畢后诉字,自動提交事務(wù)懦尝。
事務(wù)的功能演示
先來創(chuàng)建兩個表一個用戶表一個訂單表,寫入兩條數(shù)據(jù)壤圃。
查看一下表內(nèi)的數(shù)據(jù)陵霉。
現(xiàn)在我們來開啟事務(wù):start translation。
我們打開一個窗口伍绳,作為一個新的用戶踊挠,現(xiàn)在我們看見,數(shù)據(jù)是沒有變化的冲杀。也就是說效床,當(dāng)一個事務(wù)沒有完成的時候,用戶只能看到事務(wù)完成前权谁,或者完成后的狀態(tài)剩檀。
現(xiàn)在我們的操作完成,來提交事務(wù)闯传。commit
數(shù)據(jù)庫中的數(shù)據(jù)修改了谨朝,別的用戶查看數(shù)據(jù)庫的時候,也是修改后的數(shù)據(jù)甥绿。如果執(zhí)行的過程中發(fā)生錯誤呢字币?開啟事務(wù)。再來修改一下數(shù)據(jù)共缕。
現(xiàn)在出錯了洗出,事務(wù)進行回滾操作,rollback图谷。
我們看到了翩活,數(shù)據(jù)庫的數(shù)據(jù)恢復(fù)到?jīng)]有修改之前的狀態(tài)。這就是我們今天要分享的 MySQL 數(shù)據(jù)庫的事務(wù)了便贵。
學(xué)習(xí)Java的同學(xué)注意了2ふ颉!承璃!學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話利耍,歡迎加入Java學(xué)習(xí)交流群:253772578,我們一起學(xué)Java!
今天分享就到這里
拜拜~