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

事务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面试题——隔离级别相关面试题的更多相关文章
- [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- MySQL事务及隔离级别详解
MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...
- MySQL实战 | 03 - 谁动了我的数据:浅析MySQL的事务隔离级别
原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity).一致性(Consistency ...
- 一文读懂MySQL的事务隔离级别及MVCC机制
回顾前文: 一文学会MySQL的explain工具 一文读懂MySQL的索引结构及查询优化 (同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) 就软件开 ...
- MySQL事务学习-->隔离级别
MySQL事务学习-->隔离级别 6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中 ...
- MySQL之事务隔离级别--转载
转自:http://793404905.blog.51cto.com/6179428/1615550 本文通过实例展示MySQL事务的四种隔离级别. 1 概念阐述 1)Read Uncommitted ...
- MySql事务及隔离级别
在数据库中,所谓事务是指作为单个逻辑工作单元执行的一系列操作. 事务的操作: 先定义开始一个事务,然后对数据作修改操作, 这时如果提交(COMMIT),这些修改就永久地保存下来 如果回退(ROLLBA ...
- Mysql数据库的隔离级别
Mysql数据库的隔离级别有四种 1.read umcommitted 读未提交(当前事务可以读取其他事务没提交的数据,会读取到脏数据) 2.read committed 读已提交(当前事务不能读 ...
- 重新学习MySQL数据库8:MySQL的事务隔离级别实战
重新学习Mysql数据库8:MySQL的事务隔离级别实战 在Mysql中,事务主要有四种隔离级别,今天我们主要是通过示例来比较下,四种隔离级别实际在应用中,会出现什么样的对应现象. Read unco ...
- mysql事务之一:MySQL数据库事务隔离级别(Transaction Isolation Level)及锁的实现原理
一.数据库隔离级别 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数 ...
随机推荐
- 基于Jmeter+ant+Jenkins+钉钉机器人群通知的接口自动化测试
前言 搭建jmeter+ant+jenkins环境有些前提条件,那就是要先配置好java环境,本地java环境至少是JDK8及以上版本,最好是JAVA11或者JAVA17等较高的java环境,像jen ...
- YOLOV5实时检测屏幕
YOLOV5实时检测屏幕 目录 YOLOV5实时检测屏幕 思考部分 先把原本的detect.py的代码贴在这里 分析代码并删减不用的部分 把屏幕的截图通过OpenCV进行显示 写一个屏幕截图的文件 用 ...
- 为什么要学习 Markdown?究竟有什么用?
点击上方蓝字设为星标 下面开始今天的学习- 本文经授权转载自微信公众号:杰哥的 IT 之旅(ID:Jake_Internet),未经许可,禁止二次转载. 一.什么是 Markdown? Markdow ...
- 使用Git进行代码版本控制和协作:代码共享、协作和版本管理
目录 1. 引言 2. 技术原理及概念 3. 实现步骤与流程 使用 Git 进行代码版本控制和协作:代码共享.协作和版本管理 Git 是一个开源的分布式版本控制系统,由 Linux 内核开发组创建.G ...
- 免费好用的录屏工具 —— EVCapture --九五小庞
下载地址:https://wwfv.lanzoue.com/b022u08ib密码:acdu 1,简介 使用过很多种屏幕录像软件,最终这个软件留下来存到我的工具宝库. 因为界面非常简单友好,功能也很好 ...
- macOS 系统 Kafka 快速入门
Kafka 的核心功能是高性能的消息发送与高性能的消息消费.以下是 Kafka 的快速入门教程. 下载并解压缩 Kafka 二进制代码压缩文件 打开 Kafka 官网的下载地址,可以看到不同版本的 K ...
- Python web 框架对比:Flask vs Django
哈喽大家好,我是咸鱼 今天我们从几个方面来比较一些现在流行的两个 python web 框架--Flask 和 Django,突出它们的主要特性.优缺点和简单案例 到最后,大家将更好地了解哪个框架更适 ...
- CF1829H Don't Blame Me题解
题意: 给定一个长度为 \(n\) 的数组,选择它的一个子序列(不一定要连续的),问有多少种选法使得它们 AND 的值的二进制表示法中有 \(k\) 个 \(1\). 思路: 这个题就是一个简单的 D ...
- 即构SDK10月迭代:新增多款语音音效、外部采集码流控制及Android SDK 最低支持操作系统版本调整
即构SDK10月迭代内容来喽~~~ 本月调整了Android SDK 最低支持的操作系统版本,新增了流删除回调原因, 4种变音效果和外部采集码流控制,同时还对登录房间.媒体播放器以及第三方库进行了优化 ...
- async/await初学者指南
JavaScript中的async和await关键字提供了一种现代语法,帮助我们处理异步操作.在本教程中,我们将深入研究如何使用async/await来掌控JavaScript程序中的流程控制. 总览 ...