在中InnoDB,所有用户活动都发生在交易内部。如果autocommit启用了mode,则每个SQL语句将自己形成一个事务。默认情况下,MySQL为autocommit 启用的每个新连接启动会话,因此,如果该SQL语句未返回错误,则MySQL在每个SQL语句之后进行提交。如果一条语句返回错误,则提交或回退行为取决于该错误。
具有会话autocommit 启用可以通过显式启动它执行多语句事务 START TRANSACTION或 BEGIN 语句,并用它结束 COMMIT或 ROLLBACK 声明。
如果autocommit在与SET autocommit = 0的会话中禁用了mode ,则该会话始终会打开一个事务。一个 COMMIT或 ROLLBACK 语句结束当前事务和一个新的开始。
如果autocommit禁用的会话在 没有显式提交最终事务的情况下结束,则MySQL将回滚该事务。
某些语句隐式结束事务,就好像您COMMIT在执行该语句之前已经完成了。有关详细信息,请参见第13.3.3节“导致隐式提交的声明”。
这COMMIT意味着当前事务中所做的更改将永久化,并且对其他会话可见。一个 ROLLBACK 声明,而另一方面,取消当前事务中的所有修改。双方 COMMIT并 ROLLBACK 释放所有InnoDB当前事务期间设置的锁。
将DML操作与事务分组
默认情况下,连接到MySQL服务器开始与 自动提交模式下启用,当你执行它自动提交每个SQL语句。如果您有其他数据库系统的经验,则可能不熟悉这种操作方式,在标准实践中,发出一系列 DML语句并提交它们或将它们全部回滚。
要使用多语句 事务,请使用SQL语句关闭自动提交功能,SET autocomm