MySQL 中的事务隔离级别有哪些?MySQL 默认的事务隔离级别是什么?为什么选择这个级别?数据库的脏读、不可重复读和幻读分别是什么?

news2025/2/26 19:26:12

MySQL 中的事务隔离级别有哪些?

1. 读未提交(Read Uncommitted)

  • 特点:一个事务可以读取另一个事务未提交的数据。如果一个事务对数据进行了修改但尚未提交,其他事务仍能读取到这些未提交的修改。
  • 优缺点
    • 优点:能够最大程度地实现并发性,减少锁定数据的时间。
    • 缺点:容易导致「脏读」问题,即读取到未提交的错误数据。
  • 适用场景:一般不常用,适用于对数据一致性要求不高且需要高并发的场景。

2. 读已提交(Read Committed)

  • 特点:一个事务只能读取另一个事务已经提交的数据。每次读取时,都会获取最新的数据版本。
  • 优缺点
    • 优点:避免了脏读问题,能读取到已提交的最新数据。
    • 缺点:可能会出现不可重复读问题,即多次读取同一数据时结果不一致。
  • 适用场景:适用于需要避免脏读但能接受不可重复读的场景。

3. 可重复读(Repeatable Read,InnoDB 默认级别)

  • 特点:在一个事务中多次读取同一数据时,结果一致。这通过多版本并发控制(MVCC)实现,确保事务开始后看到的数据是事务开始时的快照。
  • 优缺点
    • 优点:避免了脏读和不可重复读问题。
    • 缺点:可能会出现幻读问题,即插入或删除操作导致事务内查询结果不一致。
  • 适用场景
    • 是 MySQL InnoDB 的默认隔离级别,适用于大多数需要保证数据一致性的场景。
    • 通过锁定机制(如间隙锁、临键锁)可以一定程度上避免幻读。

4. 串行化(Serializable)

  • 特点:强制事务串行执行,确保事务执行时其他事务无法插入或更新数据。它通过在读取数据时加共享锁实现。
  • 优缺点
    • 优点:避免了脏读、不可重复读和幻读问题,事务隔离性最强。
    • 缺点:降低了并发性能,可能导致死锁或事务等待。
  • 适用场景:适用于对数据一致性要求极高且能接受低并发的场景。

各隔离级别支持的功能对比

以下是不同隔离级别在功能支持上的对比表格:

功能/隔离级别读取未提交数据(脏读)不可重复读幻读是否加共享锁(共享锁允许多个事务读取同一数据)
Read Uncommitted否(可能使用快照隔离)
Read Committed是(按需加锁)
Repeatable Read否(通常使用 MVCC,InnoDB 不加共享锁,而用快照)
Serializable是(加共享锁)

如何设置隔离级别

可以通过以下语句设置事务的隔离级别:

  • 临时设置(当前会话)

    SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    

    支持的级别包括:READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE

  • 全局设置

    SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
    

通过选择合适的隔离级别,可以在数据一致性和并发性能之间找到平衡,以满足具体的业务需求。

MySQL 默认的事务隔离级别是什么?为什么选择这个级别?

为什么选择可重复读作为默认隔离级别

1.平衡一致性和并发性能

  • 可重复读 在一致性和并发性能之间提供了合理的折中。它避免了脏读和不可重复读问题,同时通过多版本并发控制(MVCC)机制,允许多个事务并发执行,而不会互相阻塞。

2.避免常见并发问题

  • 脏读:一个事务读取了另一个事务未提交的数据,如果该事务回滚,会导致数据不一致。
  • 不可重复读:一个事务在多次读取同一数据时,结果不一致,因为其他事务修改了数据。
  • 可重复读 隔离级别通过 MVCC 机制,确保在一个事务中多次读取同一数据时结果一致,从而避免了这些问题。

3.适用于大多数应用场景

  • 可重复读 是一个较为严格的隔离级别,适用于大多数需要保证数据一致性的场景,如金融交易、库存管理等。它在保证数据一致性的同时,仍然能提供较高的并发性能。

4.实现机制

  • MVCC(多版本并发控制):在可重复读隔离级别下,MySQL 使用 MVCC 机制,允许多个版本的数据同时存在。每个事务看到的数据版本是事务开始时的快照,从而避免了数据不一致的问题。
  • ReadView:在事务开始时创建一个 ReadView,事务中的查询都基于这个 ReadView,确保多次查询结果一致。

总结

MySQL 默认的事务隔离级别是 可重复读,因为它在数据一致性和并发性能之间提供了合理的折中,避免了脏读和不可重复读问题,适用于大多数需要保证数据一致性的场景。通过 MVCC 和 ReadView 机制,可重复读隔离级别实现了高效的数据一致性和并发性能。

数据库的脏读、不可重复读和幻读分别是什么?

1. 脏读(Dirty Read)
  • 定义:一个事务读取了另一个事务尚未提交的数据。如果这个未提交的事务后来被回滚,那么第一个事务读取到的数据就是无效的(脏数据)。
  • 原因:事务隔离级别设置较低,如 未提交读(Read Uncommitted),导致读取到了未提交的数据。
  • 示例:假设两个事务 T1 和 T2:
    • T1 开始,并更新表中某条记录,但尚未提交。
    • T2 开始,读取了 T1 更新后的数据。
    • T1 回滚,T2 读取到的数据就变成了无效的。
2. 不可重复读(Non-Repeatable Read)
  • 定义:一个事务在两次读取同一数据时,因其他事务的修改,导致两次读取的结果不一致。包括数据被更新和删除两种情况。
  • 原因:事务隔离级别设置为 提交读(Read Committed)未提交读,其他事务在当前事务两次读取之间提交了对数据的修改或删除操作。
  • 示例:假设两个事务 T1 和 T2:
    • T1 开始,第一次读取某条记录。
    • T2 开始,修改该记录并提交。
    • T1 第二次读取时,发现数据已发生变化。
3. 幻读(Phantom Read)
  • 定义:一个事务在两次查询同一个范围的数据时,因其他事务插入或删除记录,导致前后两次查询的记录集合不一致。例如,第一次查询得到 10 条记录,第二次查询得到 11 条记录,多出的那一条记录被称为幻影行。
  • 原因:其他事务在当前事务两次查询之间插入或删除了符合条件的记录。
  • 示例:假设两个事务 T1 和 T2:
    • T1 开始,查询某个范围的记录,得到 10 条。
    • T2 开始,在该范围内插入一条新记录并提交。
    • T1 再次查询时,发现结果变为 11 条。

总结

  • 脏读 是读取到未提交的数据。
  • 不可重复读 是读取到已提交的更新或删除数据,导致两次读取结果不同。
  • 幻读 是读取到已提交的插入或删除数据,导致记录集合前后不一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2306526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

格式工厂 FormatFactory v5.18.便携版 ——多功能媒体文件转换工具

格式工厂 FormatFactory v5.18.便携版 ——多功能媒体文件转换工具 功能:视频 音频 图片 文档PDF格式 各种转换,同格式调整压缩比例,调整大小 特色:果风图标 好看; 支持多任务队列,完成自动关机 下载地址&#xff1…

KafkaTool

Offset Explorer 第一次打开需要配置kafka相关配置连接 随便先启动一个Kafka(先启动zookeeper) 设置key value 记得刷新

基于C++“简单且有效”的“数据库连接池”

前言 数据库连接池在开发中应该是很常用的一个组件,他可以很好的节省连接数据库的时间开销;本文基使用C实现了一个简单的数据库连接池,代码量只有400行只有,但是压力测试效果很好;欢迎收藏 关注,本人将会…

国产编辑器EverEdit - 洞察秋毫!文件比较功能!

1 文件比较 1.1 应用场景 项目开发过程中,可能不同的部分会由不同的人在负责,存在一个文件多人编辑的情况,用户需要寻找差异,并将文档进行合并,比较专业的文本比较工具为BeyondCompare,WinMerge等。   如…

QARepVGG--含demo实现

文章目录 前言引入Demo实现总结 前言 在上一篇博文RepVGG中,介绍了RepVGG网络。RepVGG 作为一种高效的重参数化网络,通过训练时的多分支结构(3x3卷积、1x1卷积、恒等映射)和推理时的单分支合并,在精度与速度间取得了优…

kotlin 知识点 七 泛型的高级特性

对泛型进行实化 泛型实化这个功能对于绝大多数Java 程序员来讲是非常陌生的,因为Java 中完全没有这个概 念。而如果我们想要深刻地理解泛型实化,就要先解释一下Java 的泛型擦除机制才行。 在JDK 1.5之前,Java 是没有泛型功能的,…

Transformer LLaMA

一、Transformer Transformer:一种基于自注意力机制的神经网络结构,通过并行计算和多层特征抽取,有效解决了长序列依赖问题,实现了在自然语言处理等领域的突破。 Transformer 架构摆脱了RNNs,完全依靠 Attention的优…

Qt学习 网络编程 TPC通信

一 基本网络端口 1 网络编程基本概念 通讯方式:信息的通讯时通过网络来进行,通讯方式有两种,TCP和UDP通信,TCP通讯是专用通道,指定某个信息只能走某个通道,UDP则是非专用通道,比如一个车队&am…

ESP32-S3 实战指南:BOOT-KEY 按键驱动开发全解析

一、基础知识 本篇我们使用 BOOT 按键来学习一下 GPIO 功能,首先补充一下相关术语介绍。 1、GPIO(General Purpose Input/Output) GPIO 是微控制器上的通用引脚,既可以作为输入(读取外部信号)&#xff0…

ssh配置 远程控制 远程协作 github本地配置

0.设备版本 windows11 ubuntu24.0.4 1.1 在 Linux 上启用 SSH 服务 首先,确保 Linux 计算机上安装并启用了 SSH 服务。 安装和启动 OpenSSH 服务(如果未安装) # 在终端安装 OpenSSH 服务(如果尚未安装) sudo apt …

C++知识整理day9——继承(基类与派生类之间的转换、派生类的默认成员函数、多继承问题)

文章目录 1.继承的概念和定义2.基类与派生类之间的转换3.继承中的作用域4.派生类的默认成员函数5.实现一个不能被继承的类6.继承与友元7.继承与静态成员8.多继承和菱形继承问题8.1 继承分类及菱形继承8.2 虚继承 1.继承的概念和定义 概念: 继承(inheritance)机制是⾯…

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”,又称“盘龙”,是浙闽地区的传统地方民俗文化活动。人们将少则几十条,多则上百条的板凳首尾相连,形成蜿蜒曲折的板凳龙。盘龙时,龙头在前领头&#x…

华为认证考试证书下载步骤(纸质+电子版)

华为考试证书可以通过官方渠道下载相应的电子证书,部分高级认证如HCIE还支持申请纸质证书。 一、华为电子版证书申请步骤如下: ①访问华为培训与认证网站 打开浏览器,登录华为培训与认证官方网站 ②登录个人账号 在网站首页,点…

【Android】用 chrome://inspect/#devices 调试H5页面

通常做Android开发的过程中,不可避免的需要遇到去与H5交互,甚至有时候需要去调试H5的信息。 这里分享一下Android工程里如何调试H5页面信息: 直接在浏览器地址栏输入 : chrome://inspect/#devices 直接连接手机usb,打开开发者模式…

贪心算法精品题

1.找钱问题 本题的贪心策略在于我们希望就可能的保留作用大的5元 class Solution { public:bool lemonadeChange(vector<int>& bills) {std::map<int ,int> _map;for(auto ch:bills){if(ch 5) _map[ch];else if(ch 10){if(_map[5] 0) return false;else{_m…

WEB1~6通杀

##解题思路 这六道题&#xff0c;通杀了&#xff0c;只因为是PHP的特性 来&#xff0c;看web6&#xff0c;过滤最复杂的正则&#xff0c;而且不能解析成大于999的值&#xff0c;但是&#xff0c;php是弱类型的语言&#xff0c;我只要输入任意字符数字&#xff0c;最终值就为0&…

孜然单授权系统V2.0PHP授权系统

孜然单授权V1.0系统&#xff0c;延续了2022年开发的孜然多应用授权系统V2.0 变更&#xff1a;多应用变单系统&#xff0c;去除没用的垃圾代码&#xff0c;从0开发&#xff0c;去除了一些没用的功能 完善了开发文档&#xff0c;之前那套是我写着玩的屎山代码&#xff0c;V1.0将展…

Apache SeaTunnel 构建实时数据同步管道(最新版)

文章作者 王海林 白鲸开源 数据集成引擎研发 Apache SeaTunnel Committer & PMC Member&#xff0c;Apache SkyWalking Committer&#xff0c;多年平台研发经验&#xff0c;目前专注于数据集成领域。 导读 在当今数字化快速发展的时代&#xff0c;数据已然成为企业决策…

服务器离线部署DeepSeek

目标 本次部署的目标是在本地服务器上部署DeepSeek。但是该服务不能连接外网&#xff0c;因此只能使用离线部署的方式。为了一次完成部署。现在云服务器上进行尝试。 云服务器部署尝试 云服务器配置 CentOS72080Ti 11GB 安装准备 1、上传iso并配置为本地yum源 安装前先将…

ComfyUI:Stable Diffusion 及 LoRA、VAE 、ControlNet模型解析

目录 Stable Diffusion流程 扩散过程 去噪过程 checkpoints LoRA LoRA 位置与结构 LoRA 层与原层的关系 LoRA 层的参数拆解 VAE 训练特定 VAE 时更新的参数部分 ControlNet ControlNet 位置与结构 ControlNet 的训练过程 ControlNet 的参数处理与信息融合 Contr…