快照读

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

当前读

  读取的是记录数据的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发的修改这条记录
  概念说的比较虚,也不好理解,接着举一个例子吧,假设你开启了两个事务,分别是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快照读和当前读相关推荐

  1. mysql 快照 理解_MySQL - 当前读和快照读

    当前读和快照读 InnoDB 给每一个事务生成一个唯一事务 ID 的方法称为生成快照,因此这种场景称为快照读. 但是对于更新数据不能使用快照读,因为更新数据时如果使用快照读会可能会覆盖其他事务的更改. ...

  2. mysql 快照读 幻读,InnoDB的MVCC如何解决不可重复读和快照读的幻读,当前读用next-key解决幻读...

    InnoDB默认的隔离级别是RR(可重复读),可以解决脏读和不可重复读,只解决了快照读情况下的幻读问题,当前读情况下解决幻读问题得靠next-key锁. mysql如何实现避免幻读: 在快照读读情况下 ...

  3. MySQL怎么运行的系列(十一)快照读、锁定读、半一致性读 和 加锁语句分析

    本系列文章目录 展开/收起 MySQL怎么运行的系列(一)mysql体系结构和存储引擎 MySQL怎么运行的系列(二)Innodb缓冲池 buffer pool 和 改良版LRU算法 Mysql怎么运 ...

  4. mysql快照读取_MySQL 快照读和当前读

    在MySQL读取数据时可以按照是否使用一致性非锁定读来分为快照读和当前读: 1.快照读:MySQL使用MVCC (Multiversion Concurrency Control)机制来保证被读取到数 ...

  5. mysql的快照读和当前读的区别和联系?

    mysql快照读是什么? 通过mvcc多版本并发控制来进行快照读,但是读取的是历史数据.因为mysql默认的是可重复读,可重复读不能防止幻读.此时我们要通过mysql的间隙所来实现当前读来防止幻读. ...

  6. mysql rr 更新失败_RR 级别下 update 操作的是快照读还是当前读?

    我们知道在 RR 级别下,重复的 select 操作,读取的值都会是一致的.即便在两次 select 操作的中间,有一个事务 B 修改了值,但是在事务 A 中 select 读取的值还是一致的. 那么 ...

  7. MySQL Transaction--快照读和当前读

    在MySQL读取数据时可以按照是否使用一致性非锁定读来分为快照读和当前读: 1.快照读:MySQL使用MVCC (Multiversion Concurrency Control)机制来保证被读取到数 ...

  8. 【MySQL】浅谈一致性读

    一 前言 MySQL 在不同的事务隔离级别下提供两种读模式 一致性读(非加锁), 当前读(加锁读).当前读比较简单,本文主要研究一致性读取. 二 原理概念 官方概念 "A consisten ...

  9. MVCC和快照读丶当前读

    文章目录 MVCC的实现原理 版本链 ReadView MVCC实现不同隔离级别 Read Committed隔离级别下MVCC工作原理 Repeatable Read隔离级别下MVCC工作原理 快照 ...

  10. Mysql(Innodb)如何避免幻读

    大龄菜逼初级DBA瞎JB写的,大家凑合看当个乐? 幻读Phantom Rows The so-called phantom problem occurs within a transaction wh ...

最新文章

  1. JAVA_Java常用核心包(概念)
  2. 并行计算实战-双调排序
  3. java微信oppo,OPPO实现全球首次5G微信视频通话,国产手机满分操作
  4. UNITY UI字体模糊的原因
  5. java异常判断_Java异常退出条件的判断示例代码
  6. mysql 5.7 io 性能 aio_深入理解MySQL的InnoDB引擎
  7. 关于Mysql的错误:No query specified
  8. (转载)Manacher'sAlgorithm: O(n)时间求字符串的最长回文子串
  9. Golang 笔记 2 函数、结构体、接口、指针
  10. lnmp python _mysql web_Nginx+uWSGI+DJango+Python+ Mysql 搭建可靠的python web服务器
  11. React Native 画虚线 DashLine
  12. 甘特图中的依赖关系是什么?
  13. codeforces 869c(组合数)
  14. 微信“15。。。。。”背后的故事
  15. Java RestTemplate中几种常见的请求方式
  16. Oracle not in 范围超过 1000 报错问题及解决方案
  17. 遇到 ld.lld: error: found local symbol ‘__bss_start‘ in global part of symbol table in file 错误
  18. Unexpected token u in JSON at position 0报错如何解决?
  19. CSDN看书的书架入口
  20. gbip指令集_ARM汇编指令集

热门文章

  1. java生产者消费者问题代码分析
  2. Cisco ××× 完全配置指南-连载-SSL ×××
  3. [MySQL FAQ]系列 -- 快速还原MyISAM表索引
  4. SQL注入法攻击一日通
  5. C#如何打包EXE程序生成setup安装文件
  6. DM368 Uboot
  7. matlab 捕食者和猎物,MATLAB - 追求曲线(捕食者/猎物)
  8. conda环境管理介绍
  9. matlab emf 读取,20140219-Emf_Demo EMF 矢量图 可以读取和保存EMF 的封闭类 非常实用 matlab 238万源代码下载- www.pudn.com...
  10. k8s部署tomcat及web应用_k8s部署tomcat的yaml文件