CH10事务管理与恢复.pptVIP

  • 1
  • 0
  • 约 79页
  • 2017-06-14 发布于北京
  • 举报
问题背景 现实应用中,数据库的操作与操作之间往往具有一定的语义和关联性。数据库应用希望将这些有关联的操作当作一个逻辑工作单元看待,要么都执行,要么都不执行。 [例10.1] 飞机订票系统有两个表Sale和Flight,分别记录各售票点的售票数及全部航班的剩余票数: Sale(agentNo, flightNo, date, saledNumber) Flight(flightNo, date, remainNumber) 现有A0010售票点欲出售F005航班2008年8月8日机票2张。 问题背景 可编制如下程序: 查询F005航班2008年8月8日剩余票数A; (1) if (A2) 拒绝操作,并通知票源不足; else 更新A0010售票点的售票数; 更新F005航班的剩余票数; 问题背景 语句(2)是在当F005航班2008年8月8日的剩余票数大于请求票数时更新Sale和Flight表。该更新包括两个update操作: UPDATE Sale SET saledNumber=saledNumber+2 WHERE agentNo=‘A0010’ AND flightNo=‘F005’ AND date=‘2008-08-08’ UPDATE Flight SET remainNumber=remainNumber–2 WHERE flightNo=‘F005’ AND date=‘2008-08-08’ 问题背景 假设F005航班共有200个座位,2008年8月8日机票已售198张(其中被A0010售出20张),余票2张。 当第1个UPDATE语句执行成功时,即A0010已售票数更新为22。当系统发生故障重新提供服务时,如果又有售票点请求出售F005航班2008年8月8日机票2张,由于F005的剩余票数未更新(仍为2),因此满足其要求又出售了2张。 结果多卖了2张票! 问题背景 为解决上述问题,数据库管理系统引入了事务概念,它将这些有内在联系的操作当作一个逻辑单元看待,并采取相应策略保证一个逻辑单元内的全部操作要么都执行成功,要么都不执行。 对数据库用户而言,只需将具有完整逻辑意义的一组操作正确地定义在一个事务之内即可。 事务概念 对于用户而言,事务是具有完整逻辑意义的数据库操作序列的集合。 对于数据库管理系统而言,事务则是一个读写操作序列。这些操作是一个不可分割的逻辑工作单元,要么都做,要么都不做。 事务是数据库管理系统中竞争资源、并发控制和恢复的基本单元。 它是由数据库操作语言(如SQL)或高级编程语言(如Java、C、C++)提供的事务开始语句、事务结束语句以及由它们包含的全部数据库操作语句组成。 事务结束语句 事务结束的两种类型: 事务提交(commit):将成功完成事务的执行结果(即更新)永久化,并释放事务占有的全部资源。 事务回滚(rollback):中止当前事务、撤销其对数据库所做的更新,并释放事务占有的全部资源。 SQL Server事务模式 SQL Server数据库提供了三种类型的事务模式: 显式事务是指用户使用Transact-SQL事务语句所定义的事务,其事务语句包括: 事务开始:BEGIN TRANSACTION 事务提交:COMMIT TRANSACTION,COMMIT WORK 事务回滚:ROLLBACK TRANSACTION,ROLLBACK WORK 隐式事务是指事务提交或回滚后,系统自动开始新的事务。该类事务不需要采用BEGIN TRANSACTION语句标识事务的开始。 自动定义事务:当一个语句成功执行后,它被自动提交,而当执行过程中出错时,则被自动回滚。 SQL Server事务定义举例 [例10.2] 利用SQL Server提供的显式事务模式定义例10.1中的数据库更新事务。 BEGIN TRANSACTION UPDATE Sale SET saledNumber=saledNumber+2 WHERE agentNo=‘A0010’ AND flightNo=‘F005’ AND date=‘2008-08-08’ UPDATE Flight

文档评论(0)

1亿VIP精品文档

相关文档