更新丢失、脏读、不可重复读、幻读的问题
脏读、不可重复读、幻读的问题
更新丢失(Lost Update):
当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,由于每个事务都不知道其他事务的存在,就会发生丢失更新问题—最后的更新覆盖了由其他事务所做的更新。
脏读:
就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。
不可重复读:
是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。
这是由于查询时系统中其他事务修改的提交而引起的。比如事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。
幻读:
事务A读取与搜索条件相匹配的若干行,事务B以插入或删除行等方式来修改事务A的结果集,然后再提交,以至于事务A提交后发现还有数据没有修改或者少修改了数据。
例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样。
一般解决幻读的方法是增加范围锁RangeS,锁定检索范围为只读,这样就避免了幻读。
在数据库定义的四种隔离级别中最高隔离级别SERIALIZABLE_READ可以保证不出现幻读的问题。
不可重复度和幻读区别:
不可重复读的重点是修改,幻读的重点在于新增或者删除。
文章来源: blog.csdn.net,作者:徐同学呀,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_36586120/article/details/88370946
- 点赞
- 收藏
- 关注作者
评论(0)