zoukankan      html  css  js  c++  java
  • SQL 必知必会·笔记<18>管理事务处理

    事务处理是一种机制,用来管理必须成批执行的SQL操作,保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们要 么完全执行,要么完全不执行(除非明确指示)。如果没有错误发生,整组语句提交给(写到)数据库表;如果发生错误,则进行回退(撤销),将数据库恢复到某 个已知且安全的状态。

    1. 事务处理

    使用事务处理(transaction processing),通过确保成批的SQL操作要么完全执行,要么完全不执行,来维护数据库的完整性。

    有关事务处理的几个概念

    • 事务(transaction)指一组SQL语句;
    • 回退(rollback)指撤销指定SQL语句的过程;
    • 提交(commit)指将未存储的SQL语句结果写入数据库表;
    • 保留点(savepoint)指事务处理中设置的临时占位符(placeholder),可以对它发布回退(与回退整个事务处理不同)。

    提示:可以回退哪些语句?

    事务处理用来管理INSERT、UPDATE和DELETE语句。不能回退SELECT语句(回退SELECT语句也没有必要),也不能回退CREATE或DROP操作。事务处理中可以使用这些语句,但进行回退时,这些操作也不撤销。

    2. 控制实务处理

    SQL Server要求明确标识事务处理块的开始和结束。如下:

    1 BEGIN TRANSACTION
    2 ...
    3 COMMIT TRANSACTION
    2.1 使用ROLLBACK语句

    在下面的示例中,执行DELETE操作,然后用ROLLBACK语句撤销

    1 DELETE FROM Orders;
    2 ROLLBACK;

    2.2 使用COMMIT语句

    1 BEGIN TRANSACTION
    2 DELETE OrderItems WHERE order_num = 12345
    3 DELETE Orders WHERE order_num = 12345
    4 COMMIT TRANSACTION

    2.3 使用保留点

    使用简单的ROLLBACK和COMMIT语句,就可以写入或撤销整个事务。但是,只对简单的事务才能这样做,复杂的事务可能需要部分提交或回退。 要支持回退部分事务,必须在事务处理块中的合适位置放置占位符。这样,如果需要回退,可以回退到某个占位符。在SQL中,这些占位符称为保留点。

    在SQL Server中设置占位符:

    SAVE TRANSACTION delete1;

    每个保留点都要取能够标识它的唯一名字,以便在回退时,DBMS知道回退到何处。要回退到本例给出的保留点,在SQL Server中这样还原:

    ROLLBACK TRANSACTION delete1;

    下面是一个使用占位符的完整示例:

     1 BEGIN TRANSACTION
     2 INSERT INTO Customers(cust_id, cust_name)
     3 VALUES('1000000010', 'Toys Emporium');
     4 SAVE TRANSACTION StartOrder;
     5 INSERT INTO Orders(order_num, order_date, cust_id)
     6 VALUES(20100,'2001/12/1','1000000010');
     7 IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
     8 INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
     9 VALUES(20100, 1, 'BR01', 100, 5.49);
    10 IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
    11 INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
    12 VALUES(20100, 2, 'BR03', 100, 10.99);
    13 IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
    14 COMMIT TRANSACTION

    提示:保留点越多越好

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

  • 相关阅读:
    UOJ.26.[IOI2014]Game(交互 思路)
    Good Bye 2016 F.New Year and Finding Roots(交互)
    Codeforces.835E.The penguin's game(交互 按位统计 二分)
    Codeforces.744B.Hongcow's Game(交互 按位统计)
    Codeforces.862D.Mahmoud and Ehab and the binary string(交互 二分)
    正睿OI 提高 Day1T3 ZYB玩字符串(DP)
    划分vlan
    2三层交换机实现vlan间的路由
    交换机基础-交换机远程telnet
    自动化运维环境的搭建问题处理
  • 原文地址:https://www.cnblogs.com/IPrograming/p/3341096.html
Copyright © 2011-2022 走看看