START TRANSACTION
[transaction_characteristic [, transaction_characteristic] …]
transaction_characteristic: {
WITH CONSISTENT SNAPSHOT
| READ WRITE
| READ ONLY
}
BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}
这些语句提供事务使用的控制。
- START TRANSACTION 或 BEGIN开启一个新的事务.
- COMMIT提交当前事务, 使事务持久化.
- ROLLBACK回滚当前事务, 取消修改.
- 设置autocommit不可用或对当前会话使用默认提交模式.
这些语句大家肯定都用过,比如很多人在开启事务之前就会先把autocommit给设置成false,然后START TRANSACTION或BEGIN开启事务。看到这操作我眼睛都掉下来了。这是什么鬼。你们是不是都没看官网文档还是不自己动手实验下。没觉得这样的操作有些多此一举吗?
登录MySQL会话默认给你的自动提交就是设置为开启的,这就意味着只要不是包含在事务内的语句都是原子的,就相当于被BEGIN和COMMIT包围一样,也就是说AUTOCOMMIT只针对单条语句才生效的。如果开启事务START TRANSACTION,autocommit会被隐式置为disable。
BEGIN…[COMMIT|ROLLBACK]是一回事,