什么是数据库事务



什么是数据库事务
  数据库事务是指做为单个逻辑工做单元执行的一系列操做。
  设想网上购物的一次交易,其付款过程至少包括如下几步数据库操做:
  · 更新客户所购商品的库存信息
  · 保存客户付款信息--可能包括与银行系统的交互
  · 生成订单而且保存到数据库中
  · 更新用户相关信息,例如购物数量等等
  正常的状况下,这些操做将顺利进行,最终交易成功,与交易相关的全部数据库信息也成功地更新。可是,若是在这一系列过程当中任何一个环节出了 差错,例如在更新商品库存信息时发生异常、该顾客银行账户存款不足等,都将致使交易失败。一旦交易失败,数据库中全部信息都必须保持交易前的状态不变,比 如最后一步更新用户信息时失败而致使交易失败,那么必须保证这笔失败的交易不影响数据库的状态--库存信息没有被更新、用户也没有付款,订单也没有生成。 不然,数据库的信息将会一片混乱而不可预测。
  数据库事务正是用来保证这种状况下交易的平稳性和可预测性的技术。
  数据库事务的ACID属性
  事务处理能够确保除非事务性单元内的全部操做都成功完成,不然不会永久更新面向数据的资源。经过将一组相关操做组合为一个要么所有成功要么 所有失败的单元,能够简化错误恢复并使应用程序更加可靠。一个逻辑工做单元要成为事务,必须知足所谓的ACID(原子性、一致性、隔离性和持久性)属性:
  · 原子性
  事务必须是原子工做单元;对于其数据修改,要么全都执行,要么全都不执行。一般,与某个事务关联的操做具备共同的目标,而且是相互依赖的。若是系统只执行这些操做的一个子集,则可能会破坏事务的整体目标。原子性消除了系统处理操做子集的可能性。
  · 一致性
  事务在完成时,必须使全部的数据都保持一致状态。在相关数据库中,全部规则都必须应用于事务的修改,以保持全部数据的完整性。事务结束时, 全部的内部数据结构(如 B 树索引或双向链表)都必须是正确的。某些维护一致性的责任由应用程序开发人员承担,他们必须确保应用程序已强制全部已知的完整性约束。例如,当开发用于转 账的应用程序时,应避免在转账过程当中任意移动小数点。
  · 隔离性
  由并发事务所做的修改必须与任何其它并发事务所做的修改隔离。事务查看数据时数据所处的状态,要么是另外一并发事务修改它以前的状态,要么是 另外一事务修改它以后的状态,事务不会查看中间状态的数据。这称为可串行性,由于它可以从新装载起始数据,而且重播一系列事务,以使数据结束时的状态与原始 事务执行的状态相同。当事务可序列化时将得到最高的隔离级别。在此级别上,从一组可并行执行的事务得到的结果与经过连续运行每一个事务所得到的结果相同。由 于高度隔离会限制可并行执行的事务数,因此一些应用程序下降隔离级别以换取更大的吞吐量。
  · 持久性
   事务完成以后,它对于系统的影响是永久性的。该修改即便出现致命的系统故障也将一直保持。
DBMS的责任和咱们的任务
  企业级的数据库管理系统(DBMS)都有责任提供一种保证事务的物理完整性的机制。就经常使用的SQL Server2000系统而言,它具有锁定设备隔离事务、记录设备保证事务持久性等机制。所以,咱们没必要关心数据库事务的物理完整性,而应该关注在什么情 况下使用数据库事务、事务对性能的影响,如何使用事务等等。
该文章转载自'大智の博客': http://www.csafe.cn/article.asp?id=271
相关文章
相关标签/搜索