Mysql快照读和当前读

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql快照读和当前读

快照读

  读取的是记录数据的可见版本(可能是过期的数据),不用加锁

当前读

  读取的是记录数据的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发的修改这条记录

  概念说的比较虚,也不好理解,接着举一个例子吧,假设你开启了两个事务,分别是A和B,这里有个张表,user表,里面有四条数据

 

x表示是排它锁(Exclusive),s表示共享锁(Share),

image.png


1、select快照读(照片)

 当你执行select *之后,在A与B事务中都会返回4条一样的数据,这是不用想的,当执行select的时候,innodb默认会执行快照读,相当于就是给你目前的状态找了一张照片,以后执行select 的时候就会返回当前照片里面的数据,当其他事务提交了也对你不造成影响,和你没关系,这就实现了可重复读了,那这个照片是什么时候生成的呢?不是开启事务的时候,是当你第一次执行select的时候,也就是说,当A开启了事务,然后没有执行任何操作,这时候B insert了一条数据然后commit,这时候A执行 select,那么返回的数据中就会有B添加的那条数据......之后无论再有其他事务commit都没有关系,因为照片已经生成了,而且不会再生成了,以后都会参考这张照片。


2、update、insert、delete 当前读

 当你执行这几个操作的时候默认会执行当前读,也就是会读取最新的记录,也就是别的事务提交的数据你也可以看到,这样很好理解啊,假设你要update一个记录,另一个事务已经delete这条数据并且commit了,这样不是会产生冲突吗,所以你update的时候肯定要知道最新的信息啊。


 我在这里介绍一下update的过程吧,首先会执行当前读,然后把返回的数据加锁,之后执行update。加锁是防止别的事务在这个时候对这条记录做什么,默认加的是排他锁,也就是你读都不可以,这样就可以保证数据不会出错了。但注意一点,就算你这里加了写锁,别的事务也还是能访问的,是不是很奇怪?数据库采取了一致性非锁定读,别的事务会去读取一个快照数据。

 innodb默认隔离级别是RR, 是通过MVVC来实现了,读方式有两种,执行select的时候是快照读,其余是当前读,所以,mvvc不能根本上解决幻读的情况

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 MySQL 索引
【MySQL】当前读、快照读、MVCC
【MySQL】当前读、快照读、MVCC当前读:  select...lock in share mode (共享读锁)  select...for update  update , delete , insert   当前读, 读取的是最新版本, 并且对读取的记录加锁, 阻塞其他事务同时改动相同记录,避免出现安全问题。
12518 0
|
5月前
|
存储 SQL 关系型数据库
MySQL中的当前读和快照读及其区别
MySQL中的当前读和快照读及其区别
368 0
|
5月前
|
关系型数据库 MySQL 数据库
【随手记】MySQL快照读和当前读
【随手记】MySQL快照读和当前读
216 0
|
6月前
|
关系型数据库 MySQL 数据库
【mysql】当前读和快照读,幻读和可重复读
【mysql】当前读和快照读,幻读和可重复读
382 0
|
运维 关系型数据库 MySQL
使用LVM快照备份MySQL
使用LVM快照备份MySQL
84 0
|
SQL 存储 监控
【MySQL技术内幕】8.6-快照备份和复制
【MySQL技术内幕】8.6-快照备份和复制
659 0
|
SQL 关系型数据库 数据库
RDS SQL Server 如何设置为快照隔离级别 READ_COMMITTED_SNAPSHOT
RDS SQL Server 如何设置为快照隔离级别 READ_COMMITTED_SNAPSHOT
|
关系型数据库 MySQL 数据库
从一个问题出发,搞懂MySQL MVCC、readview、快照读和undo log是什么鬼
摸鱼的时候看到某技术群里有一个问题和下面的回复
1751 0
从一个问题出发,搞懂MySQL MVCC、readview、快照读和undo log是什么鬼
|
存储 SQL 弹性计算
Linux 实例中为MySQL创建应用一致性快照最佳实践
Linux 实例中的MySQL在快照生成的某一时刻,应用一致性快照确保虚拟机内部正在进行的文件系统的写入IO、系统缓存及数据库事务完成提交。在系统恢复时刻具有更快的启动速度及更低的恢复时间RTO。
342 0
Linux 实例中为MySQL创建应用一致性快照最佳实践