MySQL 事务隔离级别:社交恐惧症的四个阶段

MySQL 事务隔离级别:社交恐惧症的四个阶段
在数据库的世界里,数据们也有社交问题!事务隔离级别就是控制它们互相看到对方的程度...
什么是事务隔离?
想象一下,数据库是一个繁忙的餐厅,每个事务都是一桌客人,而数据就是美食。事务隔离级别决定了:当甲桌客人正在吃饭时,乙桌客人能看到什么?
MySQL 的四种社交障碍等级
1️⃣ 读未提交 (Read Uncommitted) - 毫无隐私的偷窥狂
事务A: "我刚写了个数据,还没确定要不要提交..."
事务B: "我已经看到啦!嘿嘿嘿~"
事务A: "...我后悔了,撤回!"
事务B: "啊?那我刚才看到的是幻觉?"
特点: 一个事务可以看到其他事务未提交的数据变更。就像你在改简历,室友已经偷看到了草稿。
问题: 脏读 (Dirty Read) - 读到了别人还没确认的"脏数据"
2️⃣ 读已提交 (Read Committed) - 基本礼貌型
事务A: "我改完数据并确认提交了!"
事务B: "哦,现在我能看到你的新数据了"
事务A: "我又改了一次并提交了!"
事务B: "咦?数据怎么又变了?我刚才读的是假的吗?"
特点: 一个事务只能看到其他事务已经提交的数据。基本的社交礼仪。
问题: 不可重复读 (Non-repeatable Read) - 同一事务内多次读取,数据发生变化
3️⃣ 可重复读 (Repeatable Read) - 固执己见型 (MySQL 默认级别!)
事务A: "我要开始读取数据了,从现在起我只看到这个版本!"
事务B: "我已经修改并提交了新数据!"
事务A: "我看不见我看不见,在我这个事务里,数据还是老样子!"
事务B: "但我刚插入了新记录..."
事务A: "啊!怎么突然多了条数据?!"
特点: 同一事务内多次读取结果一致,但可能看不到新插入的行。
问题: 幻读 (Phantom Read) - 前后两次查询,数据行数发生变化
4️⃣ 串行化 (Serializable) - 完全社恐型
事务A: "我要操作这些数据了,其他人都别动!"
事务B: "好吧,我排队等你完事..."
DBA: "为什么系统这么慢?!"
所有事务: "我们在排队呢!♂️♀️♂️♀️"
特点: 事务们排队执行,完全避免并发问题。
问题: 性能低下 - 大家排队,效率当然差!
隔离级别对比表
| 隔离级别 | 脏读 | 不可重复读 | 幻读 | 社交能力评分 |
|---|---|---|---|---|
| 读未提交 | 可能 | 可能 | 可能 | 太开放 (0 分) |
| 读已提交 | 不可能 | 可能 | 可能 | 基本礼貌 (5 分) |
| 可重复读 | 不可能 | 不可能 | 可能* | 有点固执 (8 分) |
| 串行化 | 不可能 | 不可能 | 不可能 | 完全社恐 (10 分) |
*注意:InnoDB 下的可重复读通过多版本并发控制(MVCC)解决了大部分幻读问题,但并非完全解决。
如何设置隔离级别?️
-- 全局设置
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
-- 当前会话设置
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- 查看当前隔离级别
SELECT @@transaction_isolation;
选择建议
- 怕出错但性能不是很重要:串行化(社恐型安全第一)
- MySQL 默认且平衡好:可重复读(InnoDB 表现不错)
- 追求性能且可以容忍一些问题:读已提交(礼貌型够用了)
- 活在危险边缘:读未提交(偷窥型,不推荐)
"一个优秀的 DBA,就是既能保护数据的隐私权,又能让事务们高效社交的红娘!"
—— 匿名数据库管理员
下次面试官问你事务隔离级别,不要紧张,记住:那不过是数据库的社交障碍分级表!
MySQL 事务隔离级别:社交恐惧症的四个阶段的更多相关文章
- [51CTO]新说MySQL事务隔离级别!
新说MySQL事务隔离级别! 事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!本文所讲大部分内容,皆有官网作为佐证,因此对本文内 ...
- 查询mysql事务隔离级别
查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava 1.查看当前会话隔离 ...
- MySQL事务隔离级别测试实例
https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...
- Mysql事务-隔离级别
MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...
- MySQL事务隔离级别 解决并发问题
MySQL事务隔离级别 1. 脏读: 骗钱的手段, 两个窗口或线程分别调用数据库转账表,转账后未提交,对方查看到账后,rollback,实际钱没转. 演示方法: mysql默认的事务隔离级别为repe ...
- Mysql 事务隔离级别(图文详解)
本文由 SnailClimb 和 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事物的特性(ACID) 并发事务带来的问题 事务隔离级别 实际情况演示 脏读(读未提交) 避免脏 ...
- mysql事务隔离级别、脏读、幻读
Mysql事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...
- mysql事务隔离级别与设置
mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...
- MySQL事务隔离级别(二)
搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...
- MySQL事务隔离级别(一)
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...
随机推荐
- 解决git clone 速度慢的问题
解决git clone 速度慢的问题 1.原因 git clone特别慢是因为github.global.ssl.fastly.net域名被限制了. 只要找到这个域名对应的ip地址,然后在hosts文 ...
- 【转】Java操作Excel竟然这么简单!
最近项目需求需要用到操作Excel的功能,之前使用POI实现,但是数据量大了之后支持不是很好,所以就在网上找找资源,果不其然,如下: 原文链接:没想到啊,Java操作Excel竟然这么简单!
- 2020年最新版区块链面试题2-copy
1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成.一个块只不过是一个记录列表.当这些列表相互结合时,它们被称为区块链.例如,一个组织有100个分类账簿,其中的组合被称为区 ...
- bootwiki-Elasticsearch教程
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html Elasticsearch教程 Elasticse ...
- JAVA常见问题合集
面向对象 面向过程和面向对象 面向对象的三大基本特征:封装.继承.多态 - 封装:隐藏内部细节 继承:复用现有代码 多态:改写对象行为 JAVA为什么是面向对象的,为什么还用int等基础类型 面向对象 ...
- 芯片半导体基础(二) :20世纪最伟大的发明,PN结与晶体二极管
liwen01 2025.01.12 前言 PN结 是晶体管的基础,它使得晶体管能够作为一个放大或是开关元器件.晶体管的发明不仅是一个技术上的突破,也标志着电子学的一个新时代.它极大地推动了科技和社会 ...
- Linux:yum
yum介绍 [yellow dog updater,modified],一个在Fedora和RedHat以及SUSE.Centos中的shell前段软件包管理器 能够自动的从指定的服务器自动下载RPM ...
- 接口(interface):实例化时要覆盖所有抽象方法,否则仍为抽象类
概述 /* * 接口的使用 * 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能定义全局 ...
- 天翼云CDR基本概念
本文分享自天翼云开发者社区<天翼云CDR基本概念>,作者:f****n 产品定义 云容灾CT-CDR(Cloud Disaster Recovery)为云主机提供跨可用区的容灾保护能力,R ...
- oracle 删除过期归档脚本
一.定时任务 crontab -e 编辑 每周6凌晨3点执行脚本 0 3 * * 6 . /home/oracle/scripts/arch_delete_before_60days_arch.sh ...