我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql中autocommit与sql回滚有什么关系

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql中autocommit与sql回滚有什么关系

本篇内容主要讲解“mysql中autocommit与sql回滚有什么关系”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql中autocommit与sql回滚有什么关系”吧!

mysql中autocommit与sql回滚的关系
 
今天群里有人问了一个mysql中sql执行出错是否会回滚的问题。第一个感觉这个答案应该和autocommit有关。
 
首先交代下背景,问题复现一下:
执行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";
然后报了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
首先这是对多行进行了操作,如果其中一行出错或者执行到某行时出错,那么之前的语句是否会回滚?答案是肯定的。
但是什么时不会回滚,什么时候又会回滚呢?这个和autocommit又有什么关系呢?
1
show VARIABLES like '%autocommit%';
显示autocommit是否打开,然后关闭autocommit
1
set autocommit=0;
然后对test1表插入数据,其中那么字段是非空的,所以插入空值时肯定报错了
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');
因为不会自动提交,所以执行到第三条是会全部回滚,所以最后中没有数据
然后把autocommit打开
1
set autocommit=1;
再执行插入语句:
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');
因为会自动提交,所以执行完前两条的时候,数据会插入数据库,然后第三条的时候就报错了。所以数据库中会有两条数据。
解析来我们来模拟今天的实际问题,我们把autocommit设置成ture
  www.2cto.com  
然后执行下面的语句
1
INSERT INTO test1  (age,name) VALUEs (20,'1'),(20,'2'),(20,null),(20,'4');
虽然是autocommit了,整个语句也会报错,执行到第三条的时候也会报错,但是前两条也没有提交成功。
总结一下,如果是多次插入或修改多行的数据时,autocommit会影响执行成功的数据是否提交。如果在一条语句中执行的时候,那么会把整个操作当成一个事务来执行,所以这时候autocommit是否打开也没有作用了。单条语句成功就成功,失败即回滚。

到此,相信大家对“mysql中autocommit与sql回滚有什么关系”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mysql中autocommit与sql回滚有什么关系

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python中子类与父类有什么关系

今天就跟大家聊聊有关python中子类与父类有什么关系,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究
2023-06-14

PHP 函数返回值的类型与效率有什么关系?

php 函数返回值类型会影响效率。基本类型(标量)比对象类型更轻量,而对象类型需要分配额外内存。数组的效率取决于大小和元素类型。null 通常比标量类型更重。void 方法用于控制程序流,但可读性较差。标量或对象类型直接返回对应值。对象类型
PHP 函数返回值的类型与效率有什么关系?
2024-04-15

Java中的进程与线程有什么关系

本篇文章给大家分享的是有关Java中的进程与线程有什么关系,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。进程与线程,本质意义上说, 是操作系统的调度单位,可以看成是一种操作系统
2023-05-31

Go语言中类型与接口有什么关系

在Go语言中,类型和接口之间有一对多和多对一的关系。一个类型可以同时实现多个接口,而接口间彼此独立,不知道对方的实现。多个类型也可以实现相同的接口:一个接口的方法,不一定需要由一个类型完全实现,接口的方法可以通过在类型中嵌入其他类型或者结构体来实现。也就是说,使用者并不关心某个接口的方法是通过一个类型完全实现的,还是通过多个结构嵌入到一个结构体中拼凑起来共同实现的。
2023-05-14

什么是 MySQL 事件以及它与触发器有何关系?

MySQL 事件是一项基于预定义计划运行的任务,因此有时将其称为计划事件。换句话说,我们可以说MySQL事件调度是一个在后台运行并不断寻找要执行的事件的进程。它被称为临时触发器,因为它们是按时间触发的,而不是像基于表更新执行的触发器。我们可
2023-10-22

PHP 函数返回值的类型与 PHP 扩展的互操作性有什么关系?

php 函数返回值类型可表示为类型说明语法,明确指定了各函数的返回值类型。了解返回值类型对于创建与 php 核心引擎兼容的扩展至关重要,可避免意外转换、提高效率和增强代码可读性。具体而言,扩展函数可定义返回值类型,以便 php 引擎根据该类
PHP 函数返回值的类型与 PHP 扩展的互操作性有什么关系?
2024-04-15

编程热搜

目录