数据库系统15--事务处理

上传人:kms****20 文档编号:51458600 上传时间:2018-08-14 格式:PPT 页数:21 大小:224.50KB
返回 下载 相关 举报
数据库系统15--事务处理_第1页
第1页 / 共21页
数据库系统15--事务处理_第2页
第2页 / 共21页
数据库系统15--事务处理_第3页
第3页 / 共21页
数据库系统15--事务处理_第4页
第4页 / 共21页
数据库系统15--事务处理_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《数据库系统15--事务处理》由会员分享,可在线阅读,更多相关《数据库系统15--事务处理(21页珍藏版)》请在金锄头文库上搜索。

1、第 15 讲 事务处理一、使用事务1 事务概述2 撰写事务3 使用事务的注意事项二、分布式事务简介一、使用事务1 事务概述假设有两个表, 一个存放产品的库存信息, 一个存放订单的信息. 客户下单订购产品时, 要将其所购买的产品数量在订单表与库存表中同步 更新. 也就是说, 对订单表执行 insert 语句, 添 加一笔订单, 对库存表执行 update 语句, 根据 该产品的订购数量同步更新库存量. 因此, 需要 同时对订单表与库存表执行 insert 与 update 语 句, 并确保其执行的一致性.我们可以利用事务( Transaction )机制来完成 上述需求, 执行时将多个语句视为一

2、个完整的单 元, 如果遇到错误, 必须要能恢复到原始尚未改 变的状态. SQL Server 通过事务确保数据逻辑 的一致性, 将一系列操作当成一个单元来执行, 一起成功或一起失败. 另外, 当有多位用户同时 访问同一资源时, 必须有设计良好的机制, 以防 止多位用户同时尝试修改他人正在使用的资源, 避免造成数据不一致. 可以使用锁定(lock)与行 版本控制(RowVersioning), 来确保事务的完整性 与数据的一致性.事务机制可以将多个数据修改操作在执行时视为一个完整的单元, 如果其中有一个失败, 其它语句也会被视为执行失败, 数据会恢复到尚未修改的初始状态. 当多位用户同时访问同一

3、资源时, 成为并行访问资源. 并行数据访问必须有设计良好的机制, 以避免造成数据的不一致. 事务用单一逻辑单元来执行一系列相关操作, 必须呈现出四种属性, 即原子性(atomicity)、一 致性(consistency)、隔离性(isolation)与持久性 (durability), 称为ACID, 同时具备这四种属性才 有资格成为一条事务. 原子性: 事务必须是原子的工作, 数据要 么全部被修改, 要么全部不被修改. 一致性: 事务完成时, 全部的数据必须维 持一致的状态. 隔离性: 同时执行的事务所进行的修改, 必须与其他任何并行的事务所进行的修改隔离. 持久性: 事务完成之后, 其作

4、用便永远存 在于系统之中.事务历史记录文件会自动记录数据库的全部 事务, 所以当系统因电源中断、软件失败、客户 端出现问题而取消事务时, 它可以作为回复数据 之用. 系统因故中断, 可以自动向前完成已提交 的事务, 也可用于恢复尚未提交的事务.无向前回滚回滚向前回滚回滚在 SQL Server 2000 中事务的模式可分为显 式事务、隐式事务和自动事务三种. 显式事务: 用户使用 T-SQL 语言的事务语 句定义的事务, 具有明显的开始和结束的标志.隐式事务: 启动隐式事务后, 如果当前连接 没有事务, 则语句会自动启动一条新的显式事务. 当该条事务完成时, 下一 T-SQL 语句又会启动 一

5、条新的事务.自动事务: 这是 SQL Server 的默认事务管 理模式. 每个T-SQL语句在成功执行完成后, 都 被自动提交; 如果遇到错误, 则自动回滚该语句.2 撰写事务程序在 SQL Server 中应用程序主要通过指定事 务的启动和结束的时间来控制事务. 在一个事务 启动之后, 结束之前, 系统执行的所有 T-SQL 语句都是该事务的一部分. 显式事务的启动: BEGIN TRANSACTION显式事务的结束:COMMIT TRAN 或 ROLLBACK TRANCOMMIT TRAN 的含义:如果事务成功, 便会提交事务. 事务所进 行的任何修改都会变成数据库永久的一部分. 同

6、时也会释放资源, 如该事务使用的锁定.ROLLBACK TRAN 的含义:如果事务执行中出现错误, 或用户取消了事 务, 便会将事务回滚. 回滚到事务启动前的状态 来取消事务中所有的修改, 释放事务所占用的资 源.USE pubs GO BEGIN TRAN myTranINSERT INTO stores (stor_id, stor_name)VALUES(9999, Forest) GOINSERT INTO discounts (discounttype, stor_id,discount)VALUES(清仓甩卖, 9999, 50.00) IF error0BEGINROLLBACK

7、 TRAN myTranPRINT 插入打折记录出错RETURNEND COMMIT TRAN myTran保存点使用 SAVE TRAN 语句可以在事务存储过 程中建立一个存储点, 使得用户能将事务回滚到 该存储点的状态, 而不是简单的回滚整个事务.TRANCOUNT系统预设了全局变量用于跟踪正在进行的事 务的数目. 通过检查TRANCOUNT变量的值 判断当前有多少个事务正在执行, 并判断是否需 要回滚事务.3 使用事务的注意事项在启动事务之后, 系统为了维护事务的ACID 属性, 必须耗费很多的资源. 例如, 当事务执行 过程中涉及到数据的修改时, SQL Server 就会自 动启动独

8、占锁, 以防止任何其他事务读取该数据, 而这种锁定会一直持续到事务结束为止. 这期间 其他用户将不能访问这些数据, 所以在多用户系 统中, 使用事务处理程序时必须有意识地提高事 务的工作效率.事务使用的一些经验性的原则. 事务尽可能短. 必须对数据进行修改时才 启动事务, 修改结束后应立即提交或回滚事务. 事务中避免一些耗时的交互式操作. 在数据操纵语句中使用条件语句, 以涉及 尽可能少的记录. 在 SQL Server 中虽然允许事务嵌套, 但 实际应用中不建议使用. 尽量避免并发问题, 注意管理隐性事务.分布式事务是跨越两个或者多个数据源的事务.随着 Internet 和各种网络应用的发展

9、, 在一个应用程序中同时访问多个服务器上的数据库的需求 已经非常普遍. 例如, 在客户通过电子商务网站购物并且进行网上支付时, 看到的商品信息可能存储在厂家或者商场的数据库中, 而客户的存款信息是保存在银行的数据库中. 为完成一次购物, 网站的后台程序需要同时访问位于多个不同位置的数据库.二、分布式事务简介访问分布式数据库也需要使用事务, 以保证对数据的所有操作都完整、一致, 要么全部成功,要么全部失败, 这种跨越了分布的多个数据库的事务即为分布式事务.以电子商务的购物程序为例. 某顾客使用信用卡从网站上购买玫瑰花, 他可以登录某个销售鲜花的站点, 在那里购买想要的鲜花并要求送货给某朋友. 下

10、面是整个流程.(1) 顾客登录网站浏览鲜花. 此时, 网站程序和后台的数据库进行了连接, 以显示各种鲜花的品种、价格、图片等资料.(2) 顾客选择了想要购买的玫瑰花, 将其放入 购物车中.此时, 要连接数据库查找顾客的身份, 如是否 是会员等, 以确定鲜花的价格, 也要记录选择的花.(3) 顾客选择了结帐, 并通过安全的连接输入 了信用卡信息.此时, 要开始一项数据库事务, 完成相应工作.(4) 在稍后的时间, 网站与商家的财务、配送 等相关人员按照订单处理收款、配送等事宜. 此时, 也要开始一项数据库事务, 有如下操作: 查询订购表中的记录 通过安全通道和应用程序接口连接到银 行数据库, 对

11、顾客收费 安排配送, 并更新订购表配送状态 更新顾客购买历史纪录表中此次购买配送状态在上述的购买流程中, 使用了两次数据库事务, 但如果不使用分布式事务, 就会有导致数据不一致 的可能性. 比如: 顾客的付款已从信用卡上转走, 但顾客却 没有收到订购的鲜花. 顾客的付款未转到商家的帐户上, 而订购 记录却被商家处理, 并且安排了配送, 顾客也收到 了鲜花. 订购表可能被更新并显示货物已经被送走, 但实际上货物并没有被送走.使用分布式事务将能够避免出现这些问题. 如果对顾客安排的配送事务失败, 那么分布式事务管理机制就将取消或者回滚在银行信用卡上进行的转帐操作. 如果对信用卡的支付操作失败, 分布式事务管理机制也会发出指令使安排配送的事务失败. 从上面的例子可以看出, 在一个逻辑操作单元中同时访问位于物理或者逻辑位置不同的 多个数据库, 而且要实现事务的 ACID 特性, 相对于仅仅访问一个数据库并且实现事务特性 的复杂程度、困难程度都增加了许多.SQL Server 2000 支持分布式事务, 提供了帮助用户在更新多个数据源时仍然能够使用 事务的管理机制.思考题顾客购买鲜花的第3步(3) 顾客选择了结帐, 并通过安全的连 接输入了信用卡信息.相应的事务所应有的操作有哪些?

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号