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;

选择建议

  1. 怕出错但性能不是很重要:串行化(社恐型安全第一)
  2. MySQL 默认且平衡好:可重复读(InnoDB 表现不错)
  3. 追求性能且可以容忍一些问题:读已提交(礼貌型够用了)
  4. 活在危险边缘:读未提交(偷窥型,不推荐)

"一个优秀的 DBA,就是既能保护数据的隐私权,又能让事务们高效社交的红娘!"

—— 匿名数据库管理员


下次面试官问你事务隔离级别,不要紧张,记住:那不过是数据库的社交障碍分级表!

MySQL 事务隔离级别:社交恐惧症的四个阶段的更多相关文章

  1. [51CTO]新说MySQL事务隔离级别!

    新说MySQL事务隔离级别! 事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!本文所讲大部分内容,皆有官网作为佐证,因此对本文内 ...

  2. 查询mysql事务隔离级别

    查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava   1.查看当前会话隔离 ...

  3. MySQL事务隔离级别测试实例

    https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...

  4. Mysql事务-隔离级别

    MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...

  5. MySQL事务隔离级别 解决并发问题

    MySQL事务隔离级别 1. 脏读: 骗钱的手段, 两个窗口或线程分别调用数据库转账表,转账后未提交,对方查看到账后,rollback,实际钱没转. 演示方法: mysql默认的事务隔离级别为repe ...

  6. Mysql 事务隔离级别(图文详解)

    本文由 SnailClimb 和 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事物的特性(ACID) 并发事务带来的问题 事务隔离级别 实际情况演示 脏读(读未提交) 避免脏 ...

  7. mysql事务隔离级别、脏读、幻读

    Mysql事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...

  8. mysql事务隔离级别与设置

    mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...

  9. MySQL事务隔离级别(二)

    搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...

  10. MySQL事务隔离级别(一)

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

随机推荐

  1. 架构-初识BFF

    引言 晚上公司开了一个技术分享会,主要内容就是公司的项目架构,会中讲解了项目整体架构是BFF架构,就是在微服务之上多加了一层. 除此之外,还讲解了DDD设计思想,主要用于各个业务中台,如订单中台.用户 ...

  2. 禁用Windows服务器iis错误导致启动vs调试

    问题描述: IIS站点错误会导致windows服务器启动vs调试,这在生产服务器是完全没必要的,会导致下面的问题,弹出一个调试框,必须手动关闭.很是不爽.. 关闭调试导入注册表: Windows Re ...

  3. 再制作个WCH-LINK下载器

    用CH549可以制作成支持两种模式的WCH-LINK下载器,两种模式指的是RISC-V和DAPLINK模式. 如果用于沁恒的CH32V203等芯片,我们可以将这个下载器设置成RISC-V下载模式. 如 ...

  4. BOF编写-修改时间戳

    模板配置 跟着网上的教程使用evilashz师傅的模板,下载模板解压至vs的模板目录: %UserProfile%\Documents\Visual Studio 2022\Templates\Pro ...

  5. 回顾 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报

    前言 今天咱们一起来回顾一下 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报,看看是否有适合你学习和参考的项目和框架. 简报初衷 公众号每月定期推广和分享的C#/.NE ...

  6. WPF create Flower shape

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. w3cschool-微信小程序开发文档-工具

    微信小程序工具 概览 2020-07-22 15:24 更新 为了帮助开发者简单和高效地开发微信小程序,我们推出了全新的开发者工具,集成了开发调试.代码编辑及程序发布等功能. 扫码登录 启动工具时,开 ...

  8. GD32F103C8T6看门狗

    GD32F10x看门狗 两个看门狗设备(独立看门狗IWDG和窗口看门狗WWDG)可用来检测和解决由软件错误引起的故障: 当计数器达到给定的超时值时,触发一个中断(仅适用于窗口型看门狗)或产生系统复位. ...

  9. uni-app封装input组件用于登录

    组件 <template> <view> <view class="uni-form-item uni-column"> <input c ...

  10. Ubuntu Linux部署DeepSeek

    技术背景 DeepSeek是这段时间最热门的话题之一,其蒸馏模型可以实现低成本而高质量的推理,使得我们现在可以在本地小型化的硬件上也用上大模型这一AI利器.本文主要介绍通过Ollama来部署DeepS ...