本篇內(nèi)容主要講解“MySQL中autocommit與sql回滾有什么關(guān)系”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“mysql中autocommit與sql回滾有什么關(guān)系”吧!
創(chuàng)新互聯(lián)主營殷都網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件開發(fā),殷都h5成都微信小程序搭建,殷都網(wǎng)站營銷推廣歡迎殷都等地區(qū)企業(yè)咨詢
mysql中autocommit與sql回滾的關(guān)系
今天群里有人問了一個(gè)mysql中sql執(zhí)行出錯(cuò)是否會(huì)回滾的問題。第一個(gè)感覺這個(gè)答案應(yīng)該和autocommit有關(guā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ò),那么之前的語句是否會(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í)行插入語句:
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ù)庫,然后第三條的時(shí)候就報(bào)錯(cuò)了。所以數(shù)據(jù)庫中會(huì)有兩條數(shù)據(jù)。
解析來我們來模擬今天的實(shí)際問題,我們把a(bǔ)utocommit設(shè)置成ture
www.2cto.com
然后執(zhí)行下面的語句
1
INSERT INTO test1 (age,name) VALUEs (20,'1'),(20,'2'),(20,null),(20,'4');
雖然是autocommit了,整個(gè)語句也會(huì)報(bào)錯(cuò),執(zhí)行到第三條的時(shí)候也會(huì)報(bào)錯(cuò),但是前兩條也沒有提交成功。
總結(jié)一下,如果是多次插入或修改多行的數(shù)據(jù)時(shí),autocommit會(huì)影響執(zhí)行成功的數(shù)據(jù)是否提交。如果在一條語句中執(zhí)行的時(shí)候,那么會(huì)把整個(gè)操作當(dāng)成一個(gè)事務(wù)來執(zhí)行,所以這時(shí)候autocommit是否打開也沒有作用了。單條語句成功就成功,失敗即回滾。
到此,相信大家對(duì)“mysql中autocommit與sql回滾有什么關(guān)系”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
網(wǎng)頁題目:mysql中autocommit與sql回滾有什么關(guān)系
本文網(wǎng)址:http://jinyejixie.com/article34/ijgcpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、微信公眾號(hào)、云服務(wù)器、做網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)