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

在 MySQL 中,默认的事务隔离级别是 可重复读(Repeatable Read)。这是 InnoDB 存储引擎的默认事务隔离级别。


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

1. 解决不可重复读问题

  • 不可重复读 是指在同一事务内,连续两次读取同一数据时,数据的值可能发生变化,因为其他事务修改了该数据并提交。
  • 可重复读 隔离级别保证了在一个事务内,无论多少次读取数据,结果都是一致的,避免了 不可重复读 问题。这样,应用程序在执行多次读取操作时,确保每次读取的数据都是一致的,从而减少了数据不一致的风险。

2. 较高的并发性能

  • 相比于 串行化 隔离级别,可重复读 提供了较好的并发性能。虽然 可重复读 允许事务间的并发执行,但它通过保证数据读取的一致性,避免了多个事务对同一数据的修改冲突,同时避免了大范围的锁竞争和资源浪费。
  • 它是一个 折中方案,在 性能一致性 之间做了平衡。

3. 减少幻读问题的影响

  • 幻读 是指在同一事务中,第一次查询时没有返回某些数据,第二次查询时却因为其他事务插入了数据,导致查询结果发生变化。
  • 可重复读 隔离级别无法完全解决幻读问题,但在 InnoDB 存储引擎中,通过使用 下一键锁(Next-Key Lock),可以有效减少幻读的发生,从而为大多数应用场景提供足够的数据一致性和隔离性。

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

  • 可重复读 在大多数应用中提供了足够的隔离性,尤其是那些需要 读操作的一致性 但对性能要求也较高的系统。
  • 它能够有效处理事务中的读取操作,减少由于并发导致的数据错误,同时不需要像 串行化 那样牺牲过多的性能。

总结

  • MySQL 默认的事务隔离级别是 可重复读(Repeatable Read)
  • 选择这个级别是因为它在 一致性并发性 之间提供了合理的折衷,能够解决 不可重复读幻读 等常见问题,并且在大多数应用场景下提供了较高的性能。
  • 可重复读 隔离级别是 InnoDB 引擎的默认选择,它通过 下一键锁 减少了幻读问题的影响,因此在多数情况下都能满足大部分数据库应用的需求。

MySQL 默认的事务隔离级别是什么?为什么选择这个级别?的更多相关文章

  1. MySQL 四种事务隔离级的说明

    很早之前写的文章,重新回顾和学习下: 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔 ...

  2. MySQL 四种事务隔离级的说明[转]

    很早之前写的文章,重新回顾和学习下: 按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ).MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔 ...

  3. mysql四种事务隔离级的说明

    ·未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 ·提交读(Read Committed):只能读取到已经提交的数据.Oracle等多数数据库默 ...

  4. 笔记:MYSQL四种事务隔离级。

    1·未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 脏读: 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库 ...

  5. 【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!

    写在前面 相信大部分小伙伴在面试过程中,只会针对面试官提出的表面问题来进行回答.其实不然,面试官问的每一个问题都是经过深思熟虑的,面试的时间相对来说也是短暂的,面试官不可能在很短的时间内就对你非常了解 ...

  6. 记一次Mysql事务隔离级别的坑

    最近在写代码调试时,遇到了一个问题. 遇到问题 具体操作如下: 1.调用方法A,并且方法A加上了@Transactional事务注解. 2.在方法A内部,查询并更新某个字段F的值. 3.处理其他逻辑. ...

  7. MySQL进阶15--TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读

    #TCL事物控制语言 : /* Transaction control language : 事物控制语言 事务: 一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行; ...

  8. 数据库事务隔离级ORACLE数据库事务隔离级别介绍

    本文系转载,原文地址:http://singo107.iteye.com/blog/1175084 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committ ...

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

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

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

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

随机推荐

  1. C#中的内部函数(子函数)

    private bool GetMedicalAdvice(string zyID, out DataTable dtM, out DataTable dtD) { bool result = fal ...

  2. Q:oracle解锁用户

    怎么查看oracle用户是否被锁 1.一般oracle数据库默认是10次尝试失败后锁住用户 1.查看FAILED_LOGIN_ATTEMPTS的值 select * from dba_profiles ...

  3. linux mint安装Idea

    一.前言 这一节我们介绍在Linux下如何安装与破解Intellij idea2017.现在有很多公司开发环境都是Linux,所以掌握在Linux环境下使用Idea办公也是咱们必须得掌握的技能. 记住 ...

  4. Idea下载插件报错

    报错内容Plugin Python was not installed: Cannot download 'https://plugins.jetbrains. 解决办法 file ->  se ...

  5. Flink中的时间分类

    一.分类 1.1 事件时间:EventTime 事件发⽣的时间 事件时间是每个单独事件在其产⽣进程上发⽣的时间,这个时间通常在处理的消息体中,如创建时间 在事件时间中,时间值 取决于数据产⽣记录的时间 ...

  6. Thymeleaf select 反显 默认选中

    后台代码 List<ExamTestPaperDO> list = examTestPaperService.list(map); model.addAttribute("tes ...

  7. 最优化算法Nesterov Momentum牛顿动量法

    这是对之前的Momentum的一种改进,大概思路就是,先对参数进行估计,然后使用估计后的参数来计算误差 具体实现: 需要:学习速率 ϵ, 初始参数 θ, 初始速率v, 动量衰减参数α每步迭代过程:

  8. QT5笔记:6. QT 与 C++

    QT 对标准的C++进行了扩展,引入了一些新的概念和功能 QT 的元对象编译器(Meta-Object Compiler, MOC)是一个预处理器,它预处理QT项目,先将QT的一些特性代码转换为标准的 ...

  9. JavaGUI - [03] LayoutManager布局管理器

      Component中有一个方法setBounds()可以设置当前容器的位置和大小,但如果我们手动为组件设置位置和大小的话,就会造成程序的不通用性.LayoutManager布局管理器可以根据运行平 ...

  10. C# 搭建一个 基于ISqlSugarClient 三层架构框架 涉及数据库仓储 然后中间又有业务逻辑层 案例

    要在C#中搭建基于ISqlSugarClient的三层架构框架,你需要定义数据访问层(DAL).业务逻辑层(BLL)和表现层(UI).下面是一个完整的例子,涉及数据库仓储.业务逻辑层,以及依赖注入.这 ...