SQL必知必会 笔记 第二十章 管理事务处理

20.1事务处理

事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的SQL操作要么完全执行,要么完全不执行。
关系数据库设计把数据存储在多个表中,使数据更容易操纵、维护和重用。不用深究如何以及为什么进行关系数据库设计,在某种程度上说,设计良好的数据库模式都是关联的。
事务(transaction)指一组SQL语句。
回退(rollback)指撤销指定SQL语句的过程。
提交(commit)指将未存储的SQL语句结果写入数据库表。
保留点(savepoint)指事务处理中设置的临时占位符(placeholder),你可以对它发布回退(与回退整个事物处理不同)。
可以回退那些语句?
事物处理用来管理INSERT、UPDATE和DELETE语句。不能回退SELECT语句,也不能回退CREATE或DROP操作。事务处理中可以使用这些语句,但进行回退时,它们不被撤销。

20.2控制事务处理

事物处理实现的差异:不同DBMS用来实现事物处理的语法有所不同。
管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。

BEGIN TRANSACTION
……
COMMIT TRANSACTION

20.2.1使用ROLLBACK

SQL的ROLLBACK命令用来回退SQL语句

DELETE FROM OrderROLLBACK

20.2.2使用COMMIT

一般的SQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交,即提交操作是自动进行的。但是,在事务处理块中,提交不会隐含的进行。
SQL Server中例子

BEGIN TRANSACTION
DELETE OrderItems WHERE order_num = 12345
DELETE Orders Orders WHERE order_num = 12345
COMMIT TRANSACTION;

Oracle中例子

DELETE OrderItems WHERE order_num = 12345;
DELETE Orders Orders WHERE order_num = 12345;
COMMIT;

从系统中删除完全订单12345.因为涉及更新两个数据库表,所以事物处理块来保证订单不被部分删除。最后COMMIT语句仅在不出错时写出更改。如果第一条DELETE起作用,但第二条失败,则DELETE不会提交。

20.2.3使用保留点

简单的ROLLBACK和COMMIT语句就可以写入或撤销整个事物处理。但是,只是对简单的事务处理才能这样做,更复杂的事务处理可能需要部分提交或回退。
为了支持回退部分事务处理,必须能在事务处理模块中合适的位置放置占位符。这样,如果需要回退,可以回退到某个占位符。
在MySQL和Oracle中创建占位符,可使用如下SAVEPOINT语句:

SAVEPOINT delete1;
ROLLBACK TO delete1;

保留点越多越好:可以在SQL代码中设置任意多的保留点,越多越好,为什么呢?因为保留点越多,你就越能按自己的意愿灵活地进行回退。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。