数据库学习之幻读

1 幻读的定义
在可重复读隔离级别或者读提交之下(即:在一致性试图之下),在同一个事务中,前后查询同一个范围内的数据时,发现后一次查询所得到的数据是前一次查询时所没有的。我们就成这种称这种情况为幻读。
2 幻读一些说明

  1. 在在可重复读隔离级别之下,普通的查询操作所使用的快照读,是不会看到其他事务插入的数据的。因此,幻读只有在“当前读”下才会出现。而所谓的当前读就是进行了更新操作
  2. 幻读仅仅指读取到了新插入的行的数据。由其他事务updat产生的当前读不属于幻读的范畴

3 幻读的产生的原因
在可重复读隔离级别之下,查询的过程中没有给所有的行进行加锁导致幻读。但是有时候即便加了锁,在遇到insert新(不存在)记录时,仍然会导致幻读
4 幻读的解决方案
间隙锁:用于解决insert新记录时导致幻读的情况。给行与行之间的空隙进行了加锁
行锁
行锁+间隙锁的组合,用于避免幻读的产生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MySQL数据库中,幻读是指一个事务在执行两次相同的查询时,第二次查询返回了新增或删除的数据行,从而导致结果集不一致的情况。幻读主要是由于并发事务操作导致的。 在可重复读隔离级别下,普通的查询是快照读,是不会看到别的事务插入的数据的。因此,幻读在“当前读”下才会出现。而innodb的默认事务隔离级别是rr(可重复读),它的实现技术是mvcc(MVCC只在读提交可重复读两种隔离级别下工作),基于版本的控制协议。该技术不仅可以保证innodb的可重复读,而且可以防止幻读。但是它防止的是快照读,也就是读取的数据虽然是一致的,但是数据是历史数据。 因此,在MySQL数据库中,要避免幻读问题,可以使用更高的事务隔离级别,如串行化隔离级别,或者使用行级锁来解决并发事务导致的数据不一致性问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [常用mysql数据库配置文件](https://download.csdn.net/download/zslsh44/88278582)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySQL是如何解决幻读](https://blog.csdn.net/yiqieruni/article/details/121679494)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值