溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql中autocommit與sql回滾有什么關(guān)系

發(fā)布時(shí)間:2021-08-17 02:03:04 來(lái)源:億速云 閱讀:128 作者:chen 欄目:數(shù)據(jù)庫(kù)

本篇內(nèi)容主要講解“mysql中autocommit與sql回滾有什么關(guān)系”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“mysql中autocommit與sql回滾有什么關(guān)系”吧!

mysql中autocommit與sql回滾的關(guān)系
 
今天群里有人問(wèn)了一個(gè)mysql中sql執(zhí)行出錯(cuò)是否會(huì)回滾的問(wèn)題。第一個(gè)感覺這個(gè)答案應(yīng)該和autocommit有關(guān)。
 
首先交代下背景,問(wèn)題復(fù)現(xiàn)一下:
執(zhí)行sql:
  www.2cto.com  
1
root<a href="http://my.oschina.net/u/203327" target="_blank" rel="nofollow">@wlb</a>  12:48:30>update wlb_schedule_02 set status=status*10 where gmt_create<="2012-08-16 1:00:00";
然后報(bào)了error:
1
ERROR 1197 (HY000): Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again
首先這是對(duì)多行進(jìn)行了操作,如果其中一行出錯(cuò)或者執(zhí)行到某行時(shí)出錯(cuò),那么之前的語(yǔ)句是否會(huì)回滾?答案是肯定的。
但是什么時(shí)不會(huì)回滾,什么時(shí)候又會(huì)回滾呢?這個(gè)和autocommit又有什么關(guān)系呢?
1
show VARIABLES like '%autocommit%';
顯示autocommit是否打開,然后關(guān)閉autocommit
1
set autocommit=0;
然后對(duì)test1表插入數(shù)據(jù),其中那么字段是非空的,所以插入空值時(shí)肯定報(bào)錯(cuò)了
1
INSERT INTO test1  (age,name) VALUEs (20,'1');
2
INSERT INTO test1  (age,name) VALUEs (20,'2');
3  www.2cto.com  
INSERT INTO test1  (age,name) VALUEs (20,null);
4
INSERT INTO test1  (age,name) VALUEs (20,'4');
因?yàn)椴粫?huì)自動(dòng)提交,所以執(zhí)行到第三條是會(huì)全部回滾,所以最后中沒有數(shù)據(jù)
然后把a(bǔ)utocommit打開
1
set autocommit=1;
再執(zhí)行插入語(yǔ)句:
1
INSERT INTO test1  (age,name) VALUEs (20,'1');
2
INSERT INTO test1  (age,name) VALUEs (20,'2');
3
INSERT INTO test1  (age,name) VALUEs (20,null);
4
INSERT INTO test1  (age,name) VALUEs (20,'4');
因?yàn)闀?huì)自動(dòng)提交,所以執(zhí)行完前兩條的時(shí)候,數(shù)據(jù)會(huì)插入數(shù)據(jù)庫(kù),然后第三條的時(shí)候就報(bào)錯(cuò)了。所以數(shù)據(jù)庫(kù)中會(huì)有兩條數(shù)據(jù)。
解析來(lái)我們來(lái)模擬今天的實(shí)際問(wèn)題,我們把a(bǔ)utocommit設(shè)置成ture
  www.2cto.com  
然后執(zhí)行下面的語(yǔ)句
1
INSERT INTO test1  (age,name) VALUEs (20,'1'),(20,'2'),(20,null),(20,'4');
雖然是autocommit了,整個(gè)語(yǔ)句也會(huì)報(bào)錯(cuò),執(zhí)行到第三條的時(shí)候也會(huì)報(bào)錯(cuò),但是前兩條也沒有提交成功。
總結(jié)一下,如果是多次插入或修改多行的數(shù)據(jù)時(shí),autocommit會(huì)影響執(zhí)行成功的數(shù)據(jù)是否提交。如果在一條語(yǔ)句中執(zhí)行的時(shí)候,那么會(huì)把整個(gè)操作當(dāng)成一個(gè)事務(wù)來(lái)執(zhí)行,所以這時(shí)候autocommit是否打開也沒有作用了。單條語(yǔ)句成功就成功,失敗即回滾。

到此,相信大家對(duì)“mysql中autocommit與sql回滾有什么關(guān)系”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI