- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
脏读、不可重复读、幻相数据
锁就是防止其他事务访问指定的资源的手段。锁是实现并发控制的主要方法,是多个用户能够同时操纵同一个数据库中的数据而不发生数据不一致现象的重要保障。一般来说,锁可以防止脏读、不可重复读和幻觉读。事务并发产生的问题:脏读:一个事务读取到了另外一个事务没有提交的数据事务1:更新一条数据-------------事务2:读取事务1更新的记录事务1:调用commit进行提交***此时事务2读取到的数据是保存在数据库内存中的数据,称为脏读。***读到的数据为脏数据详细解释:脏读就是指:当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。不可重复读:在同一事务中,两次读取同一数据,得到内容不同事务1:查询一条记录--------------事务2:更新事务1查询的记录--------------事务2:调用commit进行提交事务1:再次查询上次的记录***此时事务1对同一数据查询了两次,可得到的内容不同,称为不可重复读幻读:同一事务中,用同样的操作读取两次,得到的记录数不相同事务1:查询表中所有记录--------------事务2:插入一条记录--------------事务2:调用commit进行提交事务1:再次查询表中所有记录***此时事务1两次查询到的记录是不一样的,称为幻读详细解释:幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。处理以上隔离级别的问题,采用如下方是:事务隔离五种级别:TRANSACTION_NONE 不使用事务。TRANSACTION_READ_UNCOMMITTED 允许脏读。TRANSACTION_READ_COMMITTED 防止脏读,最常用的隔离级别,并且是大多数数据库的默认隔离级别TRANSACTION_REPEATABLE_READ 可以防止脏读和不可重复读,TRANSACTION_SERIALIZABLE 可以防止脏读,不可重复读取和幻读,(事务串行化)会降低数据库的效率以上的五个事务隔离级别都是在Connection接口中定义的静态常量,使用setTransactionIsolation(int level) 方法可以设置事务隔离级别。如:con.setTransactionIsolation(Connection.REPEATABLE_READ);注意:事务的隔离级别受到数据库的限制,不同的数据库支持的的隔离级别不一定相同1 脏读:修改时加排他锁,直到事务提交后才释放,读取时加共享锁,读取完释放事务1读取数据时加上共享锁后(这样在事务1读取数据的过程中,其他事务就不会修改该数据),不允许任何事物操作该数据,只能读取,之后1如果有更新操作,那么会转换为排他锁,其他事务更无权参与进来读写,这样就防止了脏读问题。但是当事务1读取数据过程中,有可能其他事务也读取了该数据,读取完毕后共享锁释放,此时事务1修改数据,修改完毕提交事务,其他事务再次读取数据时候发现数据不一致,就会出现不可重复读问题,所以这样不能够避免不可重复读问题。2 不可重复读:读取数据时加共享锁,写数据时加排他锁,都是事务提交才释放锁。读取时候不允许其他事物修改该数据,不管数据在事务过程中读取多少次,数据都是一致的,避免了不可重复读问题3 幻读问题:采用的是范围锁RangeSRangeS_S模式,锁定检索范围为只读,这样就避免了幻影读问题,在这里有个描述范围锁的文章当执行不同的隔离级别时,可能会发生各种各样不同的问题。下面对它们进行总结并举例说明:幻读:幻读发生在当两个完全相同的查询执行时,第二次查询所返回的结果集跟第一个查询不相同。发生的情况:没有范围锁。共享锁与独占锁共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。排他锁(独占锁——X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
您可能关注的文档
最近下载
- 17J03 重庆市建设工程施工现场安全设施标准图集(三)扣件式钢管满堂式(模板)支撑架-重庆市工程建设标准设计图集电子版.pdf VIP
- 数字智慧方案交通大学碳中和目标背景下的能源转型(83页PPT).pptx VIP
- 五年级上册第一课时班级事务共商定课件.pptx VIP
- 04S516 混凝土排水管道基础及接口建筑工程 图集 conv.docx VIP
- BOSS工作站RC-5使用说明书.pdf VIP
- “辅差”情况记录表(三年级数学).docx VIP
- 歌词(歌唱祖国).pdf VIP
- T3Ster操作基础与原理.ppt VIP
- 2025年四星级酒店前厅部工作流程和服务标准 .pdf VIP
- 福州大学,操作系统,复习笔记.doc VIP
文档评论(0)