Mysql:autocommit 深碍√TFBOYSˉ_ 2022-09-11 00:16 137阅读 0赞 # 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,也就是开启状态: ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAT2NlYW4mJlN0YXI_size_11_color_FFFFFF_t_70_g_se_x_16] 3. 当autocommit为开启状态时,即使没有手动start transaction开启事务,mysql默认也会将用户的操作当做事务即时提交。怎么理解呢?例如,你执行了insert into test values(2)语句,mysql默认会帮你开启事务,并且在这条插入语句执行完成之后,默认帮你提交事务。这时候可能有人会问了,那如果我手动开启了事务呢?例如如下操作,开启事务并插入两条数据: ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAT2NlYW4mJlN0YXI_size_18_color_FFFFFF_t_70_g_se_x_16] 由于A客户端没有提交,因此如果我们用B客户端去查询数据,会发现新插入的数据并没有被查询到: ![在这里插入图片描述][d72a3467eb0a49b38b83a5824af7a295.png] 当我们把A客户端的事务提交了之后,B客户端就能查询到新增加的数据了: ![在这里插入图片描述][a3dc0b8c0540446682fbed29d94a825e.png] 从上述的操作中我们可以明白,当autocommit为ON的情况下,并且又手动开启了事务,那么mysql会把start transaction 与 commit之间的语句当做一次事务来处理,默认并不会帮用户提交需要手动提交,如果用户不提交便退出了,那么事务将回滚。 4.如果我们将autocommit设置为OFF,如下: ![在这里插入图片描述][916d2a3505b949a99ecb4d808bfe4f3a.png] 那么系统仍然会自动开启事务,但是需要用户手动提交: ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAT2NlYW4mJlN0YXI_size_16_color_FFFFFF_t_70_g_se_x_16] 这时候,用客户端B去查询数据,你会发现,新增加的4记录没有被查询到: ![在这里插入图片描述][9d52b99ab2dc4cf1811b29fafb9c3d53.png] 原因就在于,将autocommit设置为OFF之后,系统默认开始了事务,但是并没有默认帮你提交了事务,因此如果我们在A客户端执行commit之后,B客户端就能查询到新的数据: ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAT2NlYW4mJlN0YXI_size_17_color_FFFFFF_t_70_g_se_x_16] ![在这里插入图片描述][a0906342ce764b17abfeef7ed514c3c0.png] # API函数 # my_bool mysql_autocommit(MYSQL *mysql, my_bool mode) 描述 * 如果模式为“1”,启用autocommit模式;如果模式为“0”,禁止autocommit模式。 返回值 * 如果成功,返回0,如果出现错误,返回非0值。 错误 * 无。 [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAT2NlYW4mJlN0YXI_size_11_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/172ac12ba02743ac809701f6157a6254.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAT2NlYW4mJlN0YXI_size_18_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/802b58714e544b6f924e4b80ac01741c.png [d72a3467eb0a49b38b83a5824af7a295.png]: /images/20220829/b36693094ff94ee99cc962a273a1aa9f.png [a3dc0b8c0540446682fbed29d94a825e.png]: /images/20220829/aa41e0009d434eddac70fcec17595002.png [916d2a3505b949a99ecb4d808bfe4f3a.png]: /images/20220829/a35b62e40f644f708a854765a656bdd0.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAT2NlYW4mJlN0YXI_size_16_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/47b440ccbc5f4d98bb8c87e360db7cac.png [9d52b99ab2dc4cf1811b29fafb9c3d53.png]: /images/20220829/1c564e5360fa47e5a5434da35d22f8c2.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAT2NlYW4mJlN0YXI_size_17_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/b010bd83d1564053bed5a7b38568ebd5.png [a0906342ce764b17abfeef7ed514c3c0.png]: /images/20220829/83a3d5ad1df64a23a4f1dbabc87ef778.png
还没有评论,来说两句吧...