mysql当前读和快照读_【MySQL】当前读、快照读、MVCC-阿里云开发者社区

本文详细介绍了MySQL中的当前读和快照读概念,以及它们在不同事务隔离级别下的实现方式。当前读通过next-key锁确保数据一致性,防止并发冲突,而快照读依赖于MVCC和undolog实现非锁定读取。通过对MVCC机制的阐述,解释了如何在Read Committed和Read Repeatable隔离级别下进行快照读操作。
摘要由CSDN通过智能技术生成

【MySQL】当前读、快照读、MVCC

当前读:

select...lock in share mode (共享读锁)

select...for update

update , delete , insert

当前读, 读取的是最新版本, 并且对读取的记录加锁, 阻塞其他事务同时改动相同记录,避免出现安全问题。

例如,假设要update一条记录,但是另一个事务已经delete这条数据并且commit了,如果不加锁就会产生冲突。所以update的时候肯定要是当前读,得到最新的信息并且锁定相应的记录。

当前读的实现方式:next-key锁(行记录锁+Gap间隙锁)

间隙锁:只有在Read Repeatable、Serializable隔离级别才有,就是锁定那些范围空间内的数据,假设锁定id>3的数据,id有3,4,5,那么4,5和后面的数字都会被锁定,像6,7...,为什么要这样?因为如果我们不锁定没有的数据,当加入了新的数据id=6,就会出现幻读,间隙锁避免了幻读。

对主键或唯一索引,如果select查询时where条件全部精确命中(=或者in),这种场景本身就不会出现幻读,所以只会加行记录锁。

快照读

简单的select操作(不包括 select ... lock in share mode, select ... for update)。

Read Committed隔离级别:每次select都生成一个快照读。

Read Repeatable隔离级别:开启事务后第一个select语句才是快照读的地方,而不是

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值