Mysql:autocommit

autocommit

背景知识:

  • mysql事务支持的引擎是InnoDB
  • 默认情况下autocommit的值为1

1.首先准备一张innodb引擎的测试表:

CREATE TABLE `test` (
  `id` int(11) NOT NULL
) ENGINE=InnoDB;
INSERT INTO `test` VALUES ('1');
INSERT INTO `test` VALUES ('3');
INSERT INTO `test` VALUES ('5');

2.执行如下命令可以发现mysql的autocommit默认值是ON,也就是开启状态:
在这里插入图片描述
3. 当autocommit为开启状态时,即使没有手动start transaction开启事务,mysql默认也会将用户的操作当做事务即时提交。怎么理解呢?例如,你执行了insert into test values(2)语句,mysql默认会帮你开启事务,并且在这条插入语句执行完成之后,默认帮你提交事务。这时候可能有人会问了,那如果我手动开启了事务呢?例如如下操作,开启事务并插入两条数据:

在这里插入图片描述
由于A客户端没有提交,因此如果我们用B客户端去查询数据,会发现新插入的数据并没有被查询到:
在这里插入图片描述
当我们把A客户端的事务提交了之后,B客户端就能查询到新增加的数据了:
在这里插入图片描述
从上述的操作中我们可以明白,当autocommit为ON的情况下,并且又手动开启了事务,那么mysql会把start transaction 与 commit之间的语句当做一次事务来处理,默认并不会帮用户提交需要手动提交,如果用户不提交便退出了,那么事务将回滚。

4.如果我们将autocommit设置为OFF,如下:
在这里插入图片描述
那么系统仍然会自动开启事务,但是需要用户手动提交:
在这里插入图片描述
这时候,用客户端B去查询数据,你会发现,新增加的4记录没有被查询到:
在这里插入图片描述
原因就在于,将autocommit设置为OFF之后,系统默认开始了事务,但是并没有默认帮你提交了事务,因此如果我们在A客户端执行commit之后,B客户端就能查询到新的数据:
在这里插入图片描述
在这里插入图片描述

API函数

my_bool mysql_autocommit(MYSQL *mysql, my_bool mode)

描述

  • 如果模式为“1”,启用autocommit模式;如果模式为“0”,禁止autocommit模式。

返回值

  • 如果成功,返回0,如果出现错误,返回非0值。

错误

  • 无。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值