隔离级别相关面试题

MySQL事务隔离级别

  1. 未提交读——可以读到其他事务未提交的数据(最新的版本)

    • 错误现象:脏读、不可重复读、幻读的现象
  2. 提交读(RC)——可以读到其他事务已提交的数据(最新已提交的版本)
    • 错误现象:不可重复读、幻读现象
    • 使用场景:希望看到最新的有效值
  3. 可重复读(RR)——在事务范围内,多次读能够保证一致性(快照建立时最新已提交版本)
    • 错误现象:幻读现象,可以加锁避免
    • 使用场景:事务内要求更强的一致性,但看到的未必是最新的有效值
  4. 串行读——在事务范围内,仅有读读可以并发,读写或写写会阻塞其他事务,用这种办法可以保证更强的一致性
    • 错误现象:无

脏读

事务1将隔离级别设置成 未提交读,事务2隔离级别为任意级别;

事务1开启事务,查询账户信息,查到id为1的账号余额为1000,id为2的余额为1000;

事务2开启事务,将id为1的账户余额修改为2000;

事务1再次查询账户信息,发现与之前查询的不一致了(此时事务2还未结束)。

上述便是脏读现象。

不可重复读

事务1将隔离级别设置成 提交读,事务2没有显示的开启事务,关闭事务;

事务1开启事务,查询账户信息,查到id为1的账号余额为1000,id为2的余额为1000;

事务2将id为1的账户余额修改为2000,因为没有显示开启事务,所以这条sql语句就是一个事务,事务2已经提交;

事务1再次查询账户信息,发现与之前查询的不一致了。

上述便是不可重复读现象。

幻读

事务1将隔离级别设置成可重复读,事务2没有显示的开启事务,关闭事务;

事务1开启事务,查询账户信息,查到id为1的账号余额为1000,id为2的余额为1000;

事务2插入一条id为3,余额为1000的数据,因为没有显示开启事务,所以这条sql语句就是一个事务,事务2已经提交;

事务1再次插入id为3,余额为5000的数据,发现id为3的数据已经存在了,报了主键重复。

上述便是幻读现象。

加锁避免幻读

因为事务1要添加id为3的数据,可以给不存在的这条数据查询时加一把锁,事务2添加时就会阻塞。

串行读隔离级别避免幻读

快照读与当前读

当前读

读取最新提交的数据

  • select … for update
  • select ... lock in share mode
  • insert、update、delete,都会按最新提交的数据进行操作

当前读本质上是基于锁的并发读操作。

快照读

读取某一个快照建立时(可以理解为某一时间点)的数据,也称为一致性读。

快照读主要体现在 select (不带for update)的语句执行时;不同隔离级别下,select 的行为不同。

  • 在 Serializable 隔离级别下 —— 普通 select 的sql语句也会变成当前读,即加共享读锁;

  • 在 RC 隔离级别下 - 每次 select 都会建立新的快照;

  • 在 RR 隔离级别下

    • 事务启动后,首次 select 会建立快照
    • 如果事务启动选择了 with consistent snapshot,事务启动时就建立快照
    • 基于旧数据的修改操作,会重新建立快照

快照读本质上读取的是历史数据(原理是回滚段),属于无锁查询。

RR下,快照建立时机——第一次select时

事务1在第一次查询时建立快照;事务2虽然修改了id为1数据,但是RR下是基于快照读,是读到的快照建立时的数据;

如果快照建立比update完会怎样呢?

事务2先提交了update,事务1select时建立快照,就会读到事务2修改的数据。

RR下,快照建立时机——事务启动时

如果想要事务启动时建立快照,需要添加with consistent snapshot;

虽然表面上事务2比事务1的select先执行,但是事务1开启事务并建立快照先开始,读到的是未修改的数据;

RR下,快照建立时机——基于旧数据修改数据时

事务2基于旧数据修改了数据,会重新建立快照,事务1再更新,会基于2000进行修改。

MySQL面试题——隔离级别相关面试题的更多相关文章

  1. [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. MySQL事务及隔离级别详解

    MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...

  3. MySQL实战 | 03 - 谁动了我的数据:浅析MySQL的事务隔离级别

    原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity).一致性(Consistency ...

  4. 一文读懂MySQL的事务隔离级别及MVCC机制

    回顾前文: 一文学会MySQL的explain工具 一文读懂MySQL的索引结构及查询优化 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) 就软件开 ...

  5. MySQL事务学习-->隔离级别

    MySQL事务学习-->隔离级别 6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中 ...

  6. MySQL之事务隔离级别--转载

    转自:http://793404905.blog.51cto.com/6179428/1615550 本文通过实例展示MySQL事务的四种隔离级别. 1 概念阐述 1)Read Uncommitted ...

  7. MySql事务及隔离级别

    在数据库中,所谓事务是指作为单个逻辑工作单元执行的一系列操作. 事务的操作: 先定义开始一个事务,然后对数据作修改操作, 这时如果提交(COMMIT),这些修改就永久地保存下来 如果回退(ROLLBA ...

  8. Mysql数据库的隔离级别

    Mysql数据库的隔离级别有四种 1.read umcommitted   读未提交(当前事务可以读取其他事务没提交的数据,会读取到脏数据) 2.read committed 读已提交(当前事务不能读 ...

  9. 重新学习MySQL数据库8:MySQL的事务隔离级别实战

    重新学习Mysql数据库8:MySQL的事务隔离级别实战 在Mysql中,事务主要有四种隔离级别,今天我们主要是通过示例来比较下,四种隔离级别实际在应用中,会出现什么样的对应现象. Read unco ...

  10. mysql事务之一:MySQL数据库事务隔离级别(Transaction Isolation Level)及锁的实现原理

    一.数据库隔离级别 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数 ...

随机推荐

  1. qq飞车端游最全按键指法教学

    目录 起步篇 超级起步 弹射起步 段位起步 基础篇 点飘 撞墙漂移 撞墙点喷 进阶篇 双喷 叠喷 断位漂移 段位双喷 侧身漂移 快速出弯 CW WCW CWW 牵引 甩尾点飘 甩尾漂移 右侧卡 左侧卡 ...

  2. 我借助 AI 神器,快速学习《阿里的 Java 开发手册》,比量子力学还夸张

    我平时经常要看 PDF,但是我看书贼慢,一个 PDF 差不多几十上百页,看一遍要花挺长时间. 我记性还不好,看完之后,过些日子就记不清 PDF 是讲什么的了.为了找到 PDF 里的某些信息,又得再花时 ...

  3. Kubernetes 1.27.2集群安装

    基础环境 系统Ubuntu 22.04.2 | 主机名称 | IP | | ----- | -------- | | k8s-master | 192.168.198.141 | | k8s-node ...

  4. GO 集合 map 使用总结

    转载请注明出处: Go语言的集合称为映射(map),它是一种无序的键值对(key-value)的集合,集合是通过键(key)来快速检索值(value)的,键(key)类似于索引,它指向值(value) ...

  5. Sentieon | 每周文献-Tumor Sequencing-第三期

    肿瘤测序系列文章-1 标题(英文):The relationship between genetic characteristics and clinical characteristics and ...

  6. Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error

    Navicat 连接 Oracle 报 ORA-03135: connection lost contact ORA-28547: connection to server failed, proba ...

  7. 带你掌握利用Terraform不同数据源扩展应用场景

    本文分享自华为云社区<利用Terraform不同数据源扩展应用场景>,作者: kaliarch . 一 背景 在生产环境中使用Terraform进行基础设施编排,通常又一些信息是通过其他外 ...

  8. 再见RestTemplate,Spring 6.1新特性:RestClient 了解一下!

    在最近发布的Spring 6.1 M2版本中,推出了一个全新的同步HTTP客户端:RestClient.用一句话来让Spring开发者认识RestClient的话:像WebClient一样具备流畅AP ...

  9. Unsupervised Learning of Depth and Ego-Motion from Video(CVPR2017)论文阅读

    深度估计问题 从输入的单目或双目图像,计算图像物体与摄像头之间距离(输出距离图),双目的距离估计应该是比较成熟和完善,但往单目上考虑主要还是成本的问题,所以做好单目的深度估计有一定的意义.单目的意思是 ...

  10. 沃罗诺伊图 (Voronoi diagram)

    沃罗诺伊图 (Voronoi diagram) Introduction: what is voronoi diagram? 沃罗诺伊图 (Voronoi diagram),取名自俄罗斯数学家乔治·沃 ...