当前位置: 首页 > >

数据库系统15--事务处理共22页PPT资料

发布时间:

第 15 讲 事务处理 一、使用事务 1 事务概述 2 撰写事务 3 使用事务的注意事项 二、分布式事务简介 一、使用事务 1 事务概述 假设有两个表, 一个存放产品的库存信息, 一个存放订单的信息. 客户下单订购产品时, 要 将其所购买的产品数量在订单表与库存表中同步 更新. 也就是说, 对订单表执行 insert 语句, 添 加一笔订单, 对库存表执行 update 语句, 根据 该产品的订购数量同步更新库存量. 因此, 需要 同时对订单表与库存表执行 insert 与 update 语 句, 并确保其执行的一致性. 我们可以利用事务( Transaction )机制来完成 上述需求, 执行时将多个语句视为一个完整的单 元, 如果遇到错误, 必须要能恢复到原始尚未改 变的状态. SQL Server 通过事务确保数据逻辑 的一致性, 将一系列操作当成一个单元来执行, 一起成功或一起失败. 另外, 当有多位用户同时 访问同一资源时, 必须有设计良好的机制, 以防 止多位用户同时尝试修改他人正在使用的资源, 避免造成数据不一致. 可以使用锁定(lock)与行 版本控制(RowVersioning), 来确保事务的完整性 与数据的一致性. 事务机制可以将多个数据修改操作在执行时 视为一个完整的单元, 如果其中有一个失败, 其 它语句也会被视为执行失败, 数据会恢复到尚未 修改的初始状态. 当多位用户同时访问同一资源 时, 成为并行访问资源. 并行数据访问必须有设 计良好的机制, 以避免造成数据的不一致. 事务用单一逻辑单元来执行一系列相关操作, 必须呈现出四种属性, 即原子性(atomicity)、一 致性(consistency)、隔离性(isolation)与持久性 (durability), 称为ACID, 同时具备这四种属性才 有资格成为一条事务. ● 原子性: 事务必须是原子的工作, 数据要 么全部被修改, 要么全部不被修改. ● 一致性: 事务完成时, 全部的数据必须维 持一致的状态. ● 隔离性: 同时执行的事务所进行的修改, 必须与其他任何并行的事务所进行的修改隔离. ● 持久性: 事务完成之后, 其作用便永远存 在于系统之中. 事务历史记录文件会自动记录数据库的全部 事务, 所以当系统因电源中断、软件失败、客户 端出现问题而取消事务时, 它可以作为回复数据 之用. 系统因故中断, 可以自动向前完成已提交 的事务, 也可用于恢复尚未提交的事务. 无 向前回滚 回滚 向前回滚 回滚 在 SQL Server 2000 中事务的模式可分为显 式事务、隐式事务和自动事务三种. 显式事务: 用户使用 T-SQL 语言的事务语 句定义的事务, 具有明显的开始和结束的标志. 隐式事务: 启动隐式事务后, 如果当前连接 没有事务, 则语句会自动启动一条新的显式事务. 当该条事务完成时, 下一 T-SQL 语句又会启动 一条新的事务. 自动事务: 这是 SQL Server 的默认事务管 理模式. 每个T-SQL语句在成功执行完成后, 都 被自动提交; 如果遇到错误, 则自动回滚该语句. 2 撰写事务程序 在 SQL Server 中应用程序主要通过指定事 务的启动和结束的时间来控制事务. 在一个事务 启动之后, 结束之前, 系统执行的所有 T-SQL 语句都是该事务的一部分. 显式事务的启动: BEGIN TRAN[SACTION] 显式事务的结束: COMMIT TRAN 或 ROLLBACK TRAN COMMIT TRAN 的含义: 如果事务成功, 便会提交事务. 事务所进 行的任何修改都会变成数据库永久的一部分. 同 时也会释放资源, 如该事务使用的锁定. ROLLBACK TRAN 的含义: 如果事务执行中出现错误, 或用户取消了事 务, 便会将事务回滚. 回滚到事务启动前的状态 来取消事务中所有的修改, 释放事务所占用的资 源. USE pubs GO BEGIN TRAN myTran INSERT INTO stores (stor_id, stor_name) VALUES(‘9999’, ’Forest’) GO INSERT INTO discounts (discounttype, stor_id, discount) VALUES(‘清仓甩卖’, ‘9999’, 50.00) IF error<>0 BEGIN ROLLBACK TRAN myTran PRINT ‘插入打折记录出错’ RETURN END COMMIT TRAN myTran 保存点 使用 SAVE TRAN 语句可以在事务存储过 程中建立一个存储点, 使得用户能将事务回滚到 该存储点的状态, 而不是简单的回滚整个事务. TRANCOUNT 系统预设了全局变量用于跟踪正在进行的事 务的数目. 通过检查TRANCOUNT变量的值 判断当前有多少个事务正在执行, 并判断是否需 要回滚事务. 3 使用事务的注意事项 在启动事务之后, 系统为了维护事务的ACID 属性, 必须耗费很多的资源. 例如, 当事务执行 过程中涉及到数据的修改时, SQL Server 就会自 动启动独占锁, 以防止任何其他事务读取该数据, 而这种锁定会一直持续到事务结束为止. 这期间 其他用户将不能访问这些数据, 所以在多用户系 统中, 使用事务处理程序时必须有意识地提高事 务的工作效率. 事务使用的一些经验性的原则. ● 事务尽可能短. 必须对数据进行修改时才 启动事务, 修改结束后应立即提交或回滚事务. ● 事务中避免一些耗时的交互式操作. ● 在数据操纵语句中使用条件语句, 以涉及 尽可能少的记录. ● 在 SQL Server 中虽然允许事务嵌套, 但 实际应用中不建议使用. ● 尽量避免并发问题, 注意管理隐性事务. 二、分布式事务简介 分布式事务是跨越两个或者多个数据源的事务. 随



友情链接: