做了一个实验

create table t (id number, mount number);

insert into t value(1,1);

  A B
1 begin;  
2 select * from t;  
3   begin;
4   select * from t;
5 update t set mount=mount+1 where id = 1;  
6 commit;  
7   select * from t where id = 1;
8   update t set mount=mount+2 where id = 1;
9   commit;
10   select * from t where id = 1;
11   commit;
12 select * from t where id = 1;  
13 commit;  
result 12步mount为2 7步mount为1,10步mount为4

这里事务B的两次结果容让人困惑,从mysql的隔离机制入手就不难理解了

首先7步是为了解决不可重复读,尽管事务A已经修改并提交,但对于事务B不知情,4与7的查询结果应一致,这也是repeatable-read算法,查询时会去寻找事务开始时的snapshot。

那为什么10步会查询为4呢?因为做了update操作,事务的起始点变化为8的位置,寻找到的那时的snapshot.

同样12步只能寻找到事务A最后一次事务操作udpate的shpshot,获得值为2。

另外此机制还可以解决幻读问题,就算事务B进行了INSERT操作,对于不知情的事务A是不会查询到新插入的数据,除非A进行一个事物操作update或者insert。

MYSQL的REPEATABLE-READ解决不可重复读和幻读相关推荐

  1. MySQL理论:脏读、不可重复读、幻读

    文章目录 1. 脏读(dirty read) 脏读是指事务读取到其他事务未提交的数据 2. 不可重复读(non-repeatable read) 不可重复读是指在同一次事务中前后查询不一致的问题 3. ...

  2. MySQL锁与脏读、不可重复读、幻读详解

    一.MySQL锁 1.锁简介 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的 计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据 ...

  3. 什么是脏读、不可重复读、幻读?别说你不知道

    脏读.不可重复读.幻读 在现代关系型数据库中,事务机制是非常重要的,假如在多个事务并发操作数据库时,如果没有有效的机制进行避免就会导致出现脏读,不可重复读,幻读. 脏读 1.在事务A执行过程中,事务A ...

  4. mysql 乐观锁 脏读_mysql 丢失更新1和2、脏读、不可重复读和幻读 事务隔离级别 悲观锁 乐观锁...

    事务是现代关系型数据库的核心之一.在多个事务并发操作数据库(多线程.网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题: ( 第一类丢失更新 A事务撤销时,把已经提交的B事务的更新数据覆 ...

  5. MySQL事务(脏读、不可重复读、幻读)

    1. 什么是事务? 是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作:这些操作作为一个整体一起向系统提交,要么都执行.要么都不执行:事务是一组不可再分割的操作集合(工作逻辑单元): ...

  6. 数据库隔离级别解决脏读、不可重复读、幻读

    一.脏读.不可重复读.幻读 脏读 读取了未提交的事务. 事务A读取了事务B中尚未提交的数据.如果事务B回滚,则A读取使用了错误的数据. 解决:如果一个事务在读的时候,禁止读取未提交的事务. 不可重复读 ...

  7. mysql可重复读和幻读的理解

    mysql可重复读和幻读的理解 可重复读和幻读的定义 最后总结 参考资料 很多教程和书籍对mysql的可重复读和幻读的解释都比较含糊,本文结合原理和其他的考证,深入分析下. 这里讨论的引擎是常用的In ...

  8. MySQL的事务总结(事务特性,隔离级别,脏读,不可重复读,幻读,常见问题)

    MySQL的事务总结(事务四大特性,隔离级别,脏读,幻读) MYSQL官网:https://dev.mysql.com/doc/refman/8.0/en/innodb-transaction-iso ...

  9. mysql事务隔离级别之锁实现原理,脏读、不可重复读、幻读出现原因及解决方案

    mysql事务隔离级别原理 观看了很多网上的博客,挺令人伤心,很难找到想要的答案... 一:所需知识 1,mysql中的锁 1.1,读锁(共享锁) 规则:若事务1对数据对象A加上读锁,则事务1只能读A ...

最新文章

  1. 在SQL Server 2000 和SQL Server 2005中导出表结构
  2. 重磅!2021年考研国家线正式公布,部分学科分数线比去年更低!
  3. 文巾解题 1816. 截断句子
  4. Scala与Java集合互转摘要
  5. codeforces 50A-C语言解题报告
  6. LeetCode LCP 11. 期望个数统计
  7. Spring Setter方法注入
  8. 比ISA更简单的监管利器,谈谈关于公司上网监管的一点事儿
  9. 【extjs6学习笔记】1.9 初始: Mixins
  10. 转载:诠释Flash的职业发展道路
  11. 引用数据类型的一些知识
  12. 在Java中用SHA1WithRSA创建的签名如何在.NET中验证
  13. PMP备考笔记(第6版)
  14. 自定义Google搜索引擎
  15. Scrapy 入门教程
  16. TZC 3012-Fibnacci Numbers(矩阵快速幂+降幂公式)
  17. 销售人员激励机制怎么定?
  18. R实现一次性合并多个数据框
  19. 牛客网题库公司真题 2021阅文C++方向笔试卷答案
  20. 上车短视频赛道:基于uniapp框架快速搭建自己的仿抖音短视频APP

热门文章

  1. 用Python控制摄像头拍照并发邮件
  2. 百度wenku的下载
  3. QEMU 模拟启动 openEuler 的树莓派镜像
  4. Centos篇-Centos Minimal安装
  5. 最简单理解高内聚低耦合
  6. 秒表计时器(Timeout 实现 Interval)
  7. C语言中fseek函数
  8. 使用Unity制作游戏AI
  9. Hexo博客主题Next添加动态线条背景canvas_nest
  10. Glide的使用回收内存问题