MySql学习笔记之——管理事务处理

管理事务处理

1、事务处理

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

orders 表就是一个很好的例子。订单存储在 orders 和 orderitems 两个表中:orders 存储实际的订单,而 orderitems 存储订购的各项物品。这两个表使用称为主键的唯一 ID 互相关联。这两个表又与包含客户和产品信息的其他表相关联。

给系统添加订单的过程如下:

  1. 检查数据库中是否存在相应的客户(从 customers 表中查询),如果不存在,添加;
  2. 检索客户的 ID;
  3. 添加一行到 orders 表,把它与客户 ID 关联;
  4. 检索 orders 表中赋予的新订单 ID;
  5. 对于订购的每个物品在 orderitems 表中添加一行,通过检索出来的 ID 把它与 orders 表关联(以及通过产品 ID 与 products 表关联)。

现在,假如由于某种数据库故障(如超出磁盘空间、安全限制、表锁等)阻止了这个过程的完成。数据库中的数据会出现什么情况?

如果故障发生在添加了客户之后,orders 表添加之前,不会有什么问题。某些客户没有订单是完全合法的。在重新执行此过程时,所插入的客户记录将被检索和使用。可以有效地从故障的地方开始执行此过程。

但是,如果故障发生在 orders 行添加之后,orderitems 行添加之前,怎么办呢?现在,数据库中有一个空订单。

更糟糕的是,如果系统在添加 orderitems 行之中出现故障。结果是数据库中存在不完整的订单,而且你不知道。

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

因此,请看相同的例子,这次我们说明过程如何工作。

  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),你可以对它发布回退(与回退整个事务处理不同)。

2、控制事务处理

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

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

START TRANSACTION

2.1、使用 ROLLBACK

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

-- 使用 ROLLBACK
SELECT * FROM ordertotals;
START TRANSACTION;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值