设为首页 - 加入收藏
广告 1000x90
您的当前位置:三五图库香港35图库大全 > 不一致性 > 正文

以下是我对三级封锁协议以及在解决数据的不一致性方面的理解不知

来源:未知 编辑:admin 时间:2019-07-26

  以下是我对三级封锁协议以及在解决数据的不一致性方面的理解,不知道对不对

  以下是我对三级封锁协议以及在解决数据的不一致性方面的理解,不知道对不对

  关于三级封锁协议,我的知识完全来源于数据库系统概论这本书。书中说,对于一级封锁协议:在事务修改数据的时候加x锁,直到事务结束(提交或者回滚)释放x锁。一级封锁协议可以有效的...

  关于三级封锁协议,我的知识完全来源于数据库系统概论这本书。书中说,对于一级封锁协议:在事务修改数据的时候加x锁,直到事务结束(提交或者回滚)释放x锁。一级封锁协议可以有效的防止丢失更新,但是不能防止脏读不可重复读的出现。而该书中对X锁的定义,只要加了X锁,其他事物不能对该数据加任何锁,所以既不能读取该对象,也不能修改该对象。那么在结合这两个概念后,我跟另一个网友提出了同样的问题:只要加了X锁,就不存在 重复读,脏读和丢失更新,所以只要加了X锁就能防止 重复读,脏读和丢失更新,也就是说有一级封锁就够了。

  那么这种想法显然是错的。我自己分析原因是:1,我们对一级封锁的理解是错的,或者直接说书中表达有误或者有歧义。应该说对于一级封锁协议,当一个事物1在修改(修改的过程也包括读取的过程)某一数据A的时候,必须先对数据A加上X锁,但是另一事物2倘若也想要修改,也必须要加X锁,但是事物1没有释放X锁,所以只能等待,这样防止了丢失更新。但是如果另一事物2只是想要读取数据A,那么无须加任何锁,因此可以随时读取,这样会导致不可重复读或者读到事物1的脏数据。2.而对于二级封锁协议,当一个事物1只是在读取数据A,读取前加S锁,得到A,释放S锁,正准备第二次读取数据A,在还没来得及加S锁之前,另一个事物2插进来对数据A修改并加X锁,修改完毕释放X锁。于是事物1第二次读取数据A并加S锁,但是读取的却是事物2修改之后的数据,这样就导致了不可重复读。而对于脏读:由于读取数据A之前必须加S锁,事物2却对数据A加X锁,因此事物1只能一直等到X锁释放之后才能加上S锁,所以也就读取不到事物2产生的中间数据也就是脏数据。3.对于三级封锁协议,当一个事物1只是想要读取数据A,读取前加S锁,一直到整个读取过程完结之后才会释放S锁,则意味着中间无论多少次重复读取,另一事物肯定不可能对其加X锁进行修改,顶多就是同样读取该数据A,因此事物1总是重复读取到没经过修改的数据A。这样就避免了不可重复读。

  总结来说,一级封锁最容易出现歧义。这主要是由X锁的概念的歧义导致的,一个数据对事物加X锁之后,其他事物不能对该事物进行依赖于加锁的操作,但是对于一级封锁,如果只是读取,根本不需要加锁,所以读取的过程可以随时进行。

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部我有个问题,我觉得只有repeatable才能避免丢失更新,更低的两级并不能。

  只有在事物1读上加了永久共享锁后,事物2才无法修改。如果是readcommit,读过程加顺时锁,事物2还是能正常写操作

本文链接:http://1763inn.com/buyizhixing/1351.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top