第十二章 事务管理
事务定义
事务是访问并可能更新各种数据项的一个程序执行单元。
这些操作要么都做,要么都不做,是一个不可分割的工作单位。例如银行转账
SQL中事务的定义
Commitwork表示提交,事务正常结束。
Rollbackwork表示事务非正常结束,撤消事务已完成的操作,回滚到事务开始时状态。
Read(X) and write(X)
read(X):从数据库传送数据项X到事务的工作区中
write(X):从事务的工作区中将数据项X写回数据库
事物特性(ACID)
原子性(Atomicity)
事务中包含的所有操作要么全做,要么全不做。原子性由恢复系统实现。
一致性(Consistency)
事务的隔离执行必须保证数据库的一致性。事务开始前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态;事务的执行过程中可以暂时的不一致。数据库的一致性状态由用户来负责,由并发控制系统实现。
如银行转账,转账前后两个帐户金额之和应保持不变。
隔离性(Isolation)
系统必须保证事务不受其它并发执行事务的影响。对任何一对事务T1,T2,在T1看来,T2要么在T1开始之前已经结束,要么在T1完成之后再开始执行。隔离性通过并发控制系统实现。
持久性(Durability)
一个事务一旦提交之后,它对数据库的影响必须是永久的。系统发生故障不能改变事务的持久性。持久性通过恢复系统实现。
事务状态图
并行VS串行
基本比较:
并行事务会破坏数据库的一致性,串行事务效率低。
并行的优点:
一个事务由不同的步骤组成,所涉及的系统资源也不同。这些步骤可以并发执行,以提高系统的吞吐量(throughput)。
系统中存在着周期不等的各种事务,串行会导致难于预测的延迟。如果各个事务所涉及的是数据库的不同部分,采用并行会减少平均响应时间(average response time)。
核心问题:
在保证一致性的前提下最大限度地提高并发度。
并发操作带来的数据不一致性
丢失修改(lost update)
不可重复读(non-repeatable read)
读“脏”数据(dirty read)
丢失数据
事务1与事务2从数据库中读入同