我正在审核其他开发人员的代码。他有一个提交,在MySQL事务开始时显式添加set autocommit=0
。这会导致会话中的其他非事务性查询出现问题。
在事务中添加set autocommit=0
是否为那个事务做了什么?我认为它没有,因为无论如何交易隐含地这样做了。
[我提出这个提交的唯一理由可能就是db曾经使用MyISAM(相对于当前的InnoDB),这可能是模仿前者交易的一种方式吗?]
答案 0 :(得分:2)
如果交易处于有效状态,则不受SET autocommit = 0
的影响。
否则,如果autocommit
的原值为1
,则SET autocommit = 0
会启动新的交易。
如果您使用的是MariaDB而且您有疑问,可以查看in_transaction
变量。
答案 1 :(得分:2)
通过将autocommit变量设置为禁用自动提交模式后 零,更改事务安全表(例如InnoDB或 NDB)不会立即成为永久性的。您必须使用COMMIT进行存储 您对磁盘或ROLLBACK的更改将忽略更改。
设置autocommit=0
将修改整个会话。
事务和非事务命令将需要明确地提交以影响数据库。