MySQL中事務(wù)是一個(gè)最小的不可分割的工作單元,事務(wù)能保證一個(gè)業(yè)務(wù)的完整性
一個(gè)業(yè)務(wù)中有多條sql語(yǔ)句,這些sql語(yǔ)句必須同時(shí)成功或同時(shí)失敗,這時(shí)需要要事務(wù)來(lái)保證這個(gè)要求。
例如:a從自己的銀行卡上轉(zhuǎn)100給b
update user set money=money-100 where name='a';
update user set moeny=money+100 where name='b';
這兩個(gè)sql語(yǔ)句必須同時(shí)成功或同時(shí)失敗,這就需要事務(wù)
MySQL里是自動(dòng)開(kāi)啟事務(wù)和自動(dòng)提交數(shù)據(jù)的,這樣每執(zhí)行一個(gè)sql語(yǔ)句都會(huì)將數(shù)據(jù)提交到數(shù)據(jù)庫(kù)中,這樣就完成一個(gè)事務(wù)
提交到數(shù)據(jù)庫(kù)中的記錄是不能撤銷的,這樣如果后面的sql語(yǔ)句執(zhí)行不了,前面的sql就不能撤回了。
我們可以關(guān)閉自動(dòng)開(kāi)啟事務(wù)和自動(dòng)提交數(shù)據(jù),這樣我們可以設(shè)置一個(gè)事務(wù)里有多個(gè)sql語(yǔ)句,在它們?nèi)繄?zhí)行完時(shí),在向數(shù)據(jù)庫(kù)提交數(shù)據(jù),這樣就能解決sql多個(gè)語(yǔ)句同時(shí)成功的操作
撤銷未提交的sql操作為 rollback
關(guān)閉自動(dòng)開(kāi)啟事務(wù)和自動(dòng)提交數(shù)據(jù) set autocommit =0;
開(kāi)啟事務(wù):begin/start transaction;
手動(dòng)提交數(shù)據(jù) :commit
事例:

手動(dòng)設(shè)置事務(wù),關(guān)閉自動(dòng)提交數(shù)據(jù)功能,我們?cè)赾md上進(jìn)行的多個(gè)sql操作不會(huì)將數(shù)據(jù)提交到數(shù)據(jù)庫(kù)中 手動(dòng)開(kāi)啟事務(wù) begin;
我們?cè)诹硪粋€(gè)cmd中查看數(shù)據(jù)庫(kù)數(shù)據(jù)沒(méi)有受其影響

我們手動(dòng)提交數(shù)據(jù)commit

這時(shí)cmd中的操作記錄才被傳到數(shù)據(jù)庫(kù),在沒(méi)有提交前,一個(gè)rollback就可以撤銷這個(gè)事務(wù)中所有的sql語(yǔ)句
提交后,數(shù)據(jù)庫(kù)才會(huì)將庫(kù)中的數(shù)據(jù)修改。

浙公網(wǎng)安備 33010602011771號(hào)