一篇关于事务处理的笔记。
事务处理
-
通过确保成批的 SQL 操作要么完全执行,要么完全不执行,来维护数据库的完整性。
-
利用事务处理,可以保证一组操作不会中途停止,它们要么完全执行,要么完全不执行。如果没有错误发生,整组语句提交到数据库表;如果发生错误,则进行回退,将数据库恢复到某个已知且安全的状态。
-
关键词:
- 事务( transaction )指一组 SQL 语句;
- 回退(rollback)指撤销指定 SQL 语句的过程;
- 提交(commit)指将未存储的 SQL 语句结果写入数据库表;
- 保留点(savepoint)指事务处理中设置的临时占位符,可以对它发布回退(与回退整个事务处理不同)。
-
可以回退的语句:INSERT、UPDATE、DELETE。
控制事务处理
-
事务处理的语法:
START TRANSACTION
或BEGIN
:开始一个新的事务;COMMIT
:提交当前的事务,提交以后,无法回滚;ROLLBACK
:回滚当前的事务,取消对表的操作;SET autocommit
:为当前的会话打开或关闭 autocommit 模式,默认打开。
-
隐式地关闭 autocommit 模式,要用
START TRANSACTION
语句:
1 | START TRANSACTION; |
ROLLBACK
- SQL 的 ROLLBACK 命令用来回退 SQL 语句。
- 在事务处理块中,DELETE 操作(SELECT 和 UPDATE 一样)并不是最终的结果。
COMMIT
- 隐式提交(implicit commit):一般的 SQL 语句都是针对数据库表直接执行和编写的,即提交(写或保存)操作是自动进行的。
SAVEPOINT
- 使用简单的 ROLLBACK 和 COMMIT 语句,就可以写入或撤销整个事务。但是,只对简单的事务才能这样做,复杂的事务可能需要部分提交或回退。
- 要支持回退部分事务,必须在事务处理块中合适的位置放占位符。
1 | SAVEPOINT identifier; |
- SAVEPOINT 越多越好: 保留点越多,越能灵活地进行回退。