zoukankan      html  css  js  c++  java
  • 20 管理事务处理

    20.1 事物处理

    事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。

    利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。如果没有错误发生,整组语句提交给(写到)数据库表。如果发生错误,则进行回退(撤销)以

    恢复数据库到某个已知且安全的状态。

    下面用一个例子来说明过程如何工作:

    订单存储在orders和orderitems两个表中: orders存储实际的订单,而orderitems存储订购的各项物品。这两个表使用称为主键(参阅第1章)的唯一ID互相关联。这两个表又与包含客户和产品信息的其他表相关联。

    1. 检查数据库中是否存在相应的客户,如果不存在,添加它
    2. 提交客户信息。
    3. 检索客户的ID
    4. 添加一行到orders表。
    5. 如果在添加行到orders表时出现故障,回退。
    6. 检索orders表中赋予的新订单ID
    7. 对于订购的每项物品,添加新行到orderitems表。
    8. 如果在添加新行到orderitems时出现故障,回退所有添加的orderitems行和orders行。
    9. 提交订单信息。

    下面是关于事务处理需要知道的几个术语:

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

    20.2 控制事务处理

    管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。

    MySQL使用下面的语句来标识事务的开始:

    START TRANSACTION

    20.2.1 使用ROLLBACK

    MySQL的ROLLBACK命令用来回退(撤销) MySQL语句,请看下面的例子:

    SELECT * FROM ordertotals;
    START TRANSACTION;
    DELETE FROM ordertotals;
    SELECT * FROM ordertotals;
    ROLLBACK;
    SELECT * FROM ordertotals;

    首先执行一条SELECT以显示该表不为空。然后开始一 个事务处理,用一条DELETE语句删除ordertotals中的所有行。另一条SELECT语句验证ordertotals确实为空。这时用一条ROLLBACK语句回退START TRANSACTION之后的所有语句,最后一条SELECT语句显示该表不为空。

    显然, ROLLBACK只能在一个事务处理内使用(在执行一条START TRANSACTION

    注意:那些语句可以回退呢?

    事务处理用来管理INSERT、 UPDATE和ELETE语句。不能回退SELECT语句。能回退CREATE或DROP操作。 

     20.2.2 使用COMMIT

    一般的MySQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交(implicit commit),即提交(写或保存)操作是自动进行的。

    但是,在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用COMMIT语句,如下所示:

    START TRANSACTION;
    DELETE FROM orderitems WHERE order_num = 20010;
    DELETE FROM orders WHERE order_num = 20010;
    COMMIT;

    在这个例子中,从系统中完全删除订单20010。因为涉及更新两个数据库表orders和orderItems,所以使用事务处理块来保证订单不被部分删除。最后的COMMIT语句仅在不出错时写出更改。如果第一条

    DELETE起作用,但第二条失败,则DELETE不会提交。

    简单的ROLLBACK和COMMIT语句就可以写入或撤销整个事务处理。但是,只是对简单的事务处理才能这样做,更复杂的事务处理可能需要部分提交或回退。

    为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符。这样,如果需要回退,可以回退到某个占位符。

    这些占位符称为保留点。为了创建占位符,可如下使用SAVEPOINT语句:

    SAVEPOINT DELETE1;

    为了回退到本该保留点,可如下进行:

    ROLLBACK TO DELETE1;

    20.2.3 更改默认的提交行为

    默认的MySQL行为是自动提交所有更改。指示MySQL不自动提交更改,需要使用以下语句:

    SET autocommit = 0;



  • 相关阅读:
    通讯录封装实现
    简单通讯录的实现 main..h .m文件全部
    iOS 开发 OC编程 字典和集合 排序方法
    iOS 开发 OC编程 数组冒泡排序.图书管理
    iOS 开发 OC编程 属性和字符串练习
    iOS 开发 OC编程 属性和字符串
    iOS 开发 OC编程 便利构造器以及初始化方法
    iOS 开发 OC编程 方法的书写
    IOS 开发 OC编程 类和对象
    iOS 开发 c语言阶段考试题
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10171127.html
Copyright © 2011-2022 走看看