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

在 MySQL 中,事务隔离级别用于定义一个事务能看到其他事务未提交的数据的程度。MySQL 支持以下四种事务隔离级别,每种级别对并发操作的支持程度和一致性要求不同。隔离级别的设置通常通过 SET TRANSACTION ISOLATION LEVEL 语句来进行。


1. 读未提交(Read Uncommitted)

  • 定义:事务可以读取到其他事务未提交的数据,这意味着事务可以看到其他事务的 脏数据
  • 特性
    • 允许 脏读:一个事务可以读取另一个事务修改但尚未提交的数据。
    • 不保证事务数据的隔离性。
  • 影响
    • 脏读:读取未提交的数据可能导致数据不一致。
    • 提供最差的并发控制和一致性,性能较好,但可能引发严重的业务逻辑问题。

2. 读已提交(Read Committed)

  • 定义:事务只能读取到其他事务已经提交的数据。即使一个事务在执行过程中多次读取数据,也只能看到其他事务已经提交的数据。
  • 特性
    • 允许 脏读 被防止,但仍然允许 不可重复读
    • 每次读取数据时都会重新查询数据库,因此每次读取的结果可能不同。
  • 影响
    • 不可重复读:同一事务在两次读取之间可能会看到不同的数据。
    • 性能上比 读未提交 要好,但依然无法防止所有的并发问题。

3. 可重复读(Repeatable Read)

  • 定义:在事务开始后,事务内的所有查询都将读取到相同的数据,直到事务结束为止,保证了 不可重复读 的避免。
  • 特性
    • 允许 幻读,即事务执行期间,其他事务插入的行数据不会被当前事务看到。
    • 默认的事务隔离级别(对于 InnoDB 存储引擎而言)。
    • 保证了读取的数据一致性,每次读取相同数据时返回的结果相同。
  • 影响
    • 不可重复读 被解决,保证数据一致性。
    • 幻读 问题仍然存在,多个事务并发执行时,可能会插入新的数据行,导致查询结果不一致。

4. 串行化(Serializable)

  • 定义:事务完全隔离,即所有事务都按顺序串行执行,不允许其他事务并发执行。这是最严格的事务隔离级别。
  • 特性
    • 会强制事务 加锁,避免了 脏读不可重复读幻读
    • 通过强制事务之间的完全顺序执行来保证数据的一致性。
  • 影响
    • 解决所有并发问题(包括脏读、不可重复读和幻读)。
    • 性能极差,因为事务会被强制串行化执行,导致系统吞吐量显著下降。

总结

隔离级别 脏读 不可重复读 幻读
读未提交 允许 允许 允许
读已提交 不允许 允许 允许
可重复读 不允许 不允许 允许
串行化 不允许 不允许 不允许

选择合适的隔离级别

  • 在 MySQL 中选择合适的事务隔离级别是根据应用需求来定的。一般来说,高并发系统需要选择较低的隔离级别以提高性能(如 读已提交可重复读),但需要保证数据一致性;而对于数据一致性要求极高的场景,可能选择 串行化,尽管它的性能代价较高。

MySQL 中的事务隔离级别有哪些?的更多相关文章

  1. 在MySQL中设置事务隔离级别有2种方法:

    在MySQL中设置事务隔离级别有2种方法: 1 在my.cnf中设置,在mysqld选项中如下设置 [mysqld] transaction-isolation = READ-COMMITTED 2 ...

  2. mysql中不同事务隔离级别下数据的显示效果--转载

    事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...

  3. 浅谈mysql中不同事务隔离级别下数据的显示效果

    事务的概念 事 务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查 询语句因为崩溃或其他原因而无法执行,那 ...

  4. mysql中的事务隔离级别

    事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典的.经常被拿出来说的例子就是转账了.假如小花要给小白转账1000元,这个转账会涉及到两个关键操作就是:将小花的余额-1000,将小白的余额 ...

  5. 重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系

    重新学习MySQL数据库9:Innodb中的事务隔离级别和锁的关系 Innodb中的事务隔离级别和锁的关系 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁 ...

  6. 事务,Oracle,MySQL及Spring事务隔离级别

    一.什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种): 原子性 (atomicity):强调事务的不可分割:一致性 (consiste ...

  7. 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?

    在日常开发中,尤其是业务开发,少不了利用 Java 对数据库进行基本的增删改查等数据操作,这也是 Java 工程师的必备技能之一.做好数据操作,不仅仅需要对 Java 语言相关框架的掌握,更需要对各种 ...

  8. MySQL事物(一)事务隔离级别和事物并发冲突

    数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始 ...

  9. MySQL四种事务隔离级别详解

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

  10. Innodb中的事务隔离级别和锁的关系(转载)

    nodb中的事务隔离级别和锁的关系 原文:https://tech.meituan.com/innodb-lock.html ameng ·2014-08-20 15:50 前言: 我们都知道事务的几 ...

随机推荐

  1. uni-app路由跳转

    navigateTo redirectTo (1)保留当前页面,跳转到应用内的某个页面,使用uni.navigateBack可以返回到原页面 (如果A->B来回频繁切换,不要A B两个方法都使用 ...

  2. SqlServer中根据某几列获取重复的数据将其删除并保留最新一条

    有时候,我们某个数据表中,可能有几列的数据都是一样的,此时我们可能想查询出这几列数据相同的所有数据行,并保留最新一条,将其他重复的数据删除. 1.ROW_NUMBER函数 假设我们有如下数据表: 此时 ...

  3. Q:linux(群晖)修改网卡速率

    问题:群晖速度莫名其妙变成了1MB/s左右,查看网络状态 网卡配置变成 全双工10Mb/s 解决方法 首先开启ssh登录权限 1.控制面板 – 终端机和SNMP里,开启SSH功能. 2.通过ssh连接 ...

  4. linux goreplay流量压测工具

    项目地址https://github.com/buger/goreplay 下载wget https://github.com/buger/goreplay/releases/download/v0. ...

  5. mac安装gcc7

    查看gcc版本 gcc --version 1.安装gcc brew install gcc@7 cd /usr/local/Cellar 改名mv gcc\@7/ gcc   2.打开mac的SIP ...

  6. deepseek等AI工具是程序员技能发展的双刃剑

    2025年,全球已有73%的程序员日常使用AI编码工具(Gartner 2025Q1数据).当我们惊叹于GitHub Copilot生成完整功能模块仅需10秒时,也需要警惕一个现象:新一代程序员在ID ...

  7. AI 时代 UI 设计的哲学与伦理

    无论是在桌面.移动应用,还是未来可能出现的全新形态中,空间直觉始终是人类在数字世界中导航的根本. 丹尼尔·罗德里格斯 图片来源:维基百科 想象一下,踏入1427年佛罗伦萨圣母玛利亚诺维拉教堂昏暗的光线 ...

  8. dart 数组去重

    List list = ['1','2','3','3']; list = list.toSet().toList();

  9. WinForm 多线程+委托来防止界面假死

    参考: http://www.cnblogs.com/xpvincent/archive/2013/08/19/3268001.html 当有大量数据需要计算.显示在界面或者调用sleep函数时,容易 ...

  10. 使用crewai创建属于你自己的AI团队

    crewai介绍 CrewAI 是一个用于协调自主 AI 代理的前沿框架. CrewAI 允许你创建 AI 团队,其中每个代理都有特定的角色.工具和目标,协同工作以完成复杂任务. 把它想象成组建你的梦 ...