第8章SQLServer_事务和锁浅析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章 事务和锁;事务的概念;事务和触发器他们有时候是功能是等同的,只是实现方式不同而已 触发器应该慎用,相对来说事务的执行效率要高,因为触发器是并发的,多条语句同时执行, 而事务中, 是一句一句执行的. 如果事务结束前.出现错误.那么整个事务就会回滚. 取消之前的所有操作. 触发器对于数据来说,也不便于维护。 用事务的话. 执行第一个正常,第二个出错.可以回滚.那么第一个执行正常的 也不会更新数据. 用触发器就不一样了. 第一个或者第二个执行正常与否,与另一条无关. 一般金融机构,多用户并发系统都采用事务来出来数据,更好的保证了数据的完整性和同一性。;银行转帐;假定张三的帐户直接转帐1000元到李四的帐户;;错误原因分析:;事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作 这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行 事务是一个不可分割的工作逻辑单元 转帐过程就是一个事务。 它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任一条出现错误,则整个转帐业务也应取消,两个帐户中的余额应恢复到原来的数据,从而确保转帐前和转帐后的余额不变,即都是1001元。; 事务的四个特性(ACID);隔离性(Isolation):在事务完成前,它对数据库的修改对其它事务必定不可见。这表明事务是必须独立的,它不应以任何方式依赖于或影响其他事务。在并发数据操作时,不同的事务拥有各自数据空间,它们的操作不会对对方产生干扰。数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但并发性越弱。 持久性(Durabiliy) :事务的持久性意味着只有当事务提交以后,操作才会完成。如果系统相关事务刚刚完成后崩溃或重新启动,则必须保证对数据所做的修改不受其的影响。;事务控制;事务控制;事务的分类; 2显式事务:显式地定义其开始和结束的事务,这是最常用的事务类型 该类事务是用户自定义事务,是以 BEGIN TRANSACTION(事务开始)开头 以 COMMIT TRANSACTION(事务提交) 或者 ROLLBACK TRANSACTION(回滚事务)语句结束的 一旦事务提交或回滚,则事务结束。 判断某条语句执行是否出错: 使用全局变量@@ERROR和@@ROWCOUNT; @@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计; 如: SET @errorSum=@errorSum+@@error 如:if @@error0 or @@rowcount1 rollback transaction; 3隐式事务;使用事务解决银行转帐问题;IF @errorSum0 --如果有错误 BEGIN print 交易失败,回滚事务 ROLLBACK TRANSACTION END ELSE BEGIN print 交易成功,提交事务,写入硬盘,永久的保存 COMMIT TRANSACTION END GO print 查看转帐事务后的余额 SELECT * FROM bank GO ;演示:转帐1000,转帐失败的情况 ;转帐800,转帐成功的情况:;事务的嵌套;--创建一个嵌套事务,在外层事务添加两条记录,在内层事务里添加一条记录 --查看事务执行之前的记录 select * from 产品 --开始事务 begin transaction --插入两条记录 insert 产品(产品名称,类别ID) values(西瓜汁,1) if @@error0 or @@rowcount1 goto TranRollBack insert 产品(产品名称,类别ID) values(猕猴桃汁,1) if @@error0 or @@rowcount1 goto TranRollBack --查看在事务嵌套执行之前的记录情况 select * from 产品;--嵌套开始 begin tran insert 产品(产品名称,类别ID) values(可乐,1) if @@error0 or @@rowcount1 rollback tran else commit tran --嵌套结束 --查看事务嵌套后的记录情况 select * from 产品 if @@error0 begin TranRollBack: rollback tran end else commit tran --查看所有事务完成后的情况 select * from 产品;事务执行之

文档评论(0)

***** + 关注
实名认证
文档贡献者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档