在InnoDB引擎里,所有用户操作都在一个事务里。如果autocommit是开启模式,每条sql语句都是一个独立的事务。MySQL建立连接时,
autocommit是默认开启的。所以,如果语句不报错,MySQL会自动提交事务。如果语句返回错误,会根据返回的错误类型来决定是提交还
是回滚。
如果一个会话开启了autocomit,又想在一个事务中执行多条语句,可以使用START TRANSACTION语句或BEGIN来开启事务,使用COMMIT
或ROLLBACK来结束事务。详情可查看13.3.1 START TRANSACTION, COMMIT, and ROLLBACK Statements。
如果在一个会话中,使用autocommit关闭了自动提交,这个会话会一直处于一个事务中。COMMIT或ROLLBACK语句会结束当前事务,开启一个
新事务。
如果在一个会话中,关闭了自动提交,但是没有提交事务,MySQL会回滚这个事务。
有些语句会自动结束一个事务,就好像你再执行这条语句之前执行了COMMIT一样。要查看详情,请查阅13.3.3 Statements That Cause an
Implicit Commit。
Commit操作意味着当前事务中的所有操作都会被持久化,并且对其它会话可见。ROLLBACK操作,会取消当前事务中的所有修改。COMMIT操作和
ROLLBACK操作会释放当前事务添加的所有InnoDB锁。
事务中DML分组操作
MySQL连接会默认开启自动提交,意味着你没执行一条语句,就会自动提交。如果你曾经使用过其它默认可以执行多条语句,然后一起提交或回滚的数据库,你可能会不太习惯这种模式。
要使用多语句事务,可以使用SET autocommit = 0来关闭自动提交,使用COMMIT或ROLLBACK来结束事务。如果保持自动提交的开启状态,就使用START TRANSACTION开来开启事务,使用COMMIT或ROLLBACK来结束事务。
15.7.2.2 自动提交,提交,和回滚