整体过程
开启事务 --> DML --> 关闭事务(提交或回滚)
完成一项任务,有多个步骤,要执行多条DML语句,各步骤中数据满足数据一致性,要么全成功,要么全失败;
事务两种形式
显示
开启事务,先执行begin 或 start transaction,使用start transaction 后台能添加read only / read write/ with consistent snapshot;
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}
结束事务,成功执行commit,失败执行rollback;
隐式
执行完SQL会自动提交事务;
mysql> set autocommit=ON
触发自动提交的条件有几类,执行DDL语句、begin、锁表、Load data、主从复制设置等,详见下方链接。
检查点
在事务中分成多个阶段,设置不同的检查点,当出现异常时,能回退到指定检查点,再待满足条件时继续执行,减少整个事务重新执行的代价。
SAVEPOINT identifier --设置检查点,标识已存在则覆盖
ROLLBACK [WORK] TO [SAVEPOINT] identifier --回滚到指定检查点
RELEASE SAVEPOINT identifier --删除检查点
事务commit或rollback,则事务中的所有检查点,都会被删除掉。