数据库原理及应用开发技术_事务管理6.ppt

数据库原理及应用开发技术_事务管理6.ppt

  1. 1、本文档共56页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库原理及应用开发技术_事务管理6

作用:实现可串行化调度 采用串行调度来保证数据库处于一致性状态 本节中对数据库的操作用更底层的读操作和写操作来描述并发控制。 用R(x)表示对数据x的读操作 W(x)表示对数据x的写操作, 一个事务由若干的读操作和写操作组成。SQL中的SELECT语句可以用一串读操作表示,INSERT语句可以用一串写操作表示,UPDATE和DELETE可以用一串读写操作表示。 6.3 并发控制 举例: 假设有两个售票员同时运行售票的事务,分别用T1和T2表示。事务用底层操作可以表示为: W(A)R(B)W(B) -W(A)表示向ReservedTicket表插入一个元组; -R(B)和W(B)表示读、写Ticket表的TicketSum列,因为一个UPDATE语句首先要读出TicketSum上的值,然后才能做加1运算,所以,UPDATE语句要使用两个底层操作。 1 并发产生的问题 并发执行一: 在t1、t2和t3时刻售票1的事务的三个操作被送到DBMS的存取层,并立刻获得执行,在t4、t5和t6时刻执行售票2的三个操作,执行的结果和我们预期的结果完全相同,如右图所示。两个事务的执行是实际上是串行执行,先执行完T1,再执行T2。 开始时Limit = 80 时刻 T1 T2 t1 W(A) t2 R(ticketsum=80) t3 W(ticketsum= ticketsum -1) t4 W(A) t5 R(ticketsum=79) t6 W(ticketsum= ticketsum -2) 结束时Limit=77 1 并发产生的问题 并发执行二: 如右图所示,T1和T2的操作穿插执行,结果是T1的修改操作没有起到应有的作用,这种现象称为“丢失修改”。 1 并发产生的问题 开始时Limit = 80 时刻 T1 T2 t1 W(A) t2 R(ticketsum=80) W(A) t3 R(ticketsum=80) t4 W(ticketsum= ticketsum -1) t5 W(ticketsum= ticketsum -2) t6 结束时Limit=78 并发执行三: 售票1执行事务T1,但是在确认是否真正买票时,他放弃了买票,事务被回滚。具体的执行过程如右图所示,T2的售票操作也没有获得成功,原因是在T1没有结束时,就读了ticketsum,这种现象叫做“读脏数据”。 开始时Limit = 1 时刻 T1 T2 t1 W(A) t2 R(ticketsum=1) t3 W(ticketsum=0) W(A) t4 R(ticketsum=0) t5 t6 t7 RollBack 结束时Limit=0 1 并发产生的问题 并发执行四: T1在执行过程中读了两次ticketsum,但是发现ticketsum的两次余额不一样,由于不知道发生了什么情况而将T1撤消了。原因是在两个读操作中间执行了另外的事务T2,这种现象叫做“不可重复读”。 开始时Limit = 1 时刻 T1 T2 t1 W(A) t2 R(ticketsum=1) t3 W(A) t4 W(ticketsum=0) t5 R(ticketsum=0) t6 RollBack t7 RollBack 结束时Limit=1 1 并发产生的问题 2 锁 类型:S锁和X锁 S锁又被称为共享锁(Share Locks),X锁又被叫做排它锁(eXclusive Locks)。 共享锁又称为读锁:若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其它事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 (2)排它锁 排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其它事务在T释放A上的锁之前不能读取和修改A。 T2 T1 X S - X N N Y S N Y Y - Y Y Y 封锁类型的相容矩阵 Y=Yes,相容的请求 N=No,不相容的请求 2 锁 封锁级别 对数据对象加锁所采用的规则。 一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。 可防止:丢失修改 不能防止:可重复读和不读“脏”数据。 2 锁 封锁级别: 二级封锁协议:实施一级封锁协议,并且事务T在读取数据R之前必须先对其加S锁,读完后即可释

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档