- 这一课介绍了
事务
是必须完整执行的SQL
语句块。 - 我们学习了如何使用
COMMIT
和ROLLBACK
语句对何时写数据、何时撤销进行明确的管理; - 还学习了如何使用
保留点
,更好地控制回退操作。
20.1 事务处理
使用事务处理
(transaction processing
),通过确保成批的SQL
操作要么完全执行,要么完全不执行,来维护数据库的完整性。
如果没有错误发生,整组语句提交给(写到)数据库表;
如果发生错误,则进行回退(撤销),将数据库恢复到某个已知且安全的状态。
事务transaction
指一组SQl
语句;回退rollback
指撤销指定SQL
语句的过程;提交commit
指将未存储的SQL
语句结果写入数据库表;保留点savepoint
指事务处理中设置的临时占位符placeholder
,可以对它发布回退。
提示:可以回退哪些语句?
- 事务处理用来管理
INSERT
、UPDATE
和DELETE
语句。- 不能回退
SELECT
语句,也不能回退CREATE
或DROP
操作。- 事务处理中可以使用这些语句,但进行回退时,这些操作也不撤销。
20.2 控制事务处理
管理事务的关键在于将SQL
语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。
有的
DBMS
要求明确标识事务处理块的开始和结束。
BEGIN TRANSACTION
和COMMIT TRANSACTION
语句之间的SQL
必须完全执行或者完全不执行。
COMMIT
用于保存更改ROLLBACK
用于撤销。
20.2.1 使用ROLLBACK
SQL
的ROLLBACK
命令用来回退(撤销)SQL
语句。
20.2.2 使用COMMIT
- 一般的
SQL
语句都是针对数据库直接执行和编写的,这就是所谓的隐式提交
(implicit commit
),即提交(写或保存)操作是自动进行的。 - 在事务处理块中,提交不会隐式进行。不过,不同
DBMS
的做法有所不同。有的DBMS
按隐式提交处理事务端,有的则不这样。
进行明确的提交,使用COMMIT
语句。
20.2.3 使用保留点
- 要支持回退部分事务,必须在事务处理块中的合适位置放置
占位符
。这样,如果需要回退,可以回退到某个占位符。在SQL
中,这些占位符称为保留点
。
在MariaDB
、MySQL
和Oracle
中创建占位符,可使用SAVEPOINT
语句。
每个保留点都要取能够标识它的唯一名字,以便在回退时,DBMS
知道回退到何处。
提示:保留点越多越好
保留点越多,你就越能灵活地进行回退。