在事务中设置autocommit = 0会做什么吗?

时间:2015-02-19 22:51:36

标签: mysql transactions

我正在审核其他开发人员的代码。他有一个提交,在MySQL事务开始时显式添加set autocommit=0。这会导致会话中的其他非事务性查询出现问题。

在事务中添加set autocommit=0是否为那个事务做了什么?我认为它没有,因为无论如何交易隐含地这样做了。

[我提出这个提交的唯一理由可能就是db曾经使用MyISAM(相对于当前的InnoDB),这可能是模仿前者交易的一种方式吗?]

2 个答案:

答案 0 :(得分:2)

如果交易处于有效状态,则不受SET autocommit = 0的影响。

否则,如果autocommit的原值为1,则SET autocommit = 0会启动新的交易。

如果您使用的是MariaDB而且您有疑问,可以查看in_transaction变量。

答案 1 :(得分:2)

来自MySQL Reference

  

通过将autocommit变量设置为禁用自动提交模式后   零,更改事务安全表(例如InnoDB或   NDB)不会立即成为永久性的。您必须使用COMMIT进行存储   您对磁盘或ROLLBACK的更改将忽略更改。

设置autocommit=0将修改整个会话。 事务和非事务命令将需要明确地提交以影响数据库。