MySql 事务隔离级别简述,以及为什么互联网项目用:读已提交(Read Commited)这个隔离级别

MySql 事务隔离级别

事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommitted) 是 是 是 读已提交(read-committed) 否 是 是 可重复读(repeatable-read) 否 否 是 串行化(serializable) 否 否 否

1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

MySql默认事务隔离级别是: 可重复读(repeatable-read)

在Oracle,SqlServer中都是选择 读已提交(Read Commited)作为默认的隔离级别

问题:为什么MySql默认设置的事务隔离级别是可重复读?

答:这要从主从复制说起,主从复制是基于binlog复制的。binlog主要有3种格式:

  • statement:记录的是修改SQL语句
  • row:记录的是每行实际数据的变更
  • mixed:statement和row模式的混合

Mysql在5.0这个版本以前,binlog只支持 STATEMENT这种格式!而这种格式在 读已提交(Read Commited)这个隔离级别下主从复制是有bug的,因此Mysql将 可重复读(Repeatable Read)作为默认的隔离级别!

5.1以后MySQL引入ROW格式,可以按行复制。因此由于历史原因,mysql将默认的隔离级别设为 可重复读(Repeatable Read),保证主从复制不出问题!

项目中是不用 读未提交(Read UnCommitted)串行化(Serializable)两个隔离级别,原因有二

  • 采用 读未提交(Read UnCommitted),一个事务读到另一个事务未提交读数据,这个不用多说吧,从逻辑上都说不过去!
  • 采用 串行化(Serializable),每个次读操作都会加锁,快照读失效,一般是使用mysql自带分布式事务功能时才使用该隔离级别!(因为这是XA事务,是强一致性事务,性能不佳!互联网的分布式方案,多采用最终一致性的事务解决方案!)

Original: https://www.cnblogs.com/zhuzhen/p/15990652.html
Author: 十七年蝉
Title: MySql 事务隔离级别简述,以及为什么互联网项目用:读已提交(Read Commited)这个隔离级别

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620964/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Hadoop集群模式安装笔记

    前言 Hadoop集群= HDFS集群+ YARN集群特点:两个集群逻辑上分离,通常物理上在一起;并且都是标准的主从架构集群 Hadoop安装 方&#…

    数据库 2023年6月11日
    081
  • 用户管理

    介绍Linux用户组的概念和对用户添加,删除和指定密码的基本操作 用户管理 Linux 系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一…

    数据库 2023年6月16日
    0123
  • 链表问题一些常用的套路与方法

    概述 链表问题应该是数据结构中比较基础的一类问题,但同时也是在面试中常考的一类问题。但是围绕链表问题的一些基本方法或者处理思想,也无外乎那几类,因此本文尝试对链表常用的一些方法或者…

    数据库 2023年6月11日
    075
  • 配置 Windows Terminal 步骤

    配置 Windows Terminal 的步骤 前提:在微软商店下载两个软件 Windows Terminal PowerShell oh-my-posh 配置 oh my pos…

    数据库 2023年6月6日
    0122
  • mybatis中文文档PDF版

    https://share.weiyun.com/2Dwd35jD 密码:dguiby Original: https://www.cnblogs.com/qingxin12345…

    数据库 2023年6月9日
    0118
  • Tomcat8下的Redis会话共享

    前言: 最近在做网站的升级,从 Tomcat7升级到 Tomcat8版本,因为没接触过,就以为升级下Tomcat的版本就万事大吉,可是天不如人愿,很顺利的将应用升级到了Tomcat…

    数据库 2023年6月14日
    0104
  • MySQL实战45讲 1,2

    01 | 基础架构:一条SQL查询语句是如何执行的? Server 层 所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层负责数据的存储和提取。其架构模…

    数据库 2023年6月16日
    068
  • 部署前后端为独立的 Docker 节点

    在『服务器部署 Vue 和 Django 项目的全记录』一文中,介绍了在服务器中使用 Nginx 部署前后端项目的过程。然而,当 Web 应用流量增多时,需要考虑负载均衡、流量分发…

    数据库 2023年6月14日
    099
  • SQL练习六–More JOIN operations

    Field nameTypeNotes id INTEGER An arbitrary unique identifier title CHAR(70) The name of t…

    数据库 2023年6月16日
    080
  • 电脑卡.磁盘占用100% .解惑找不到Superfetch等服务问题

    公司电脑没有固态。磁盘io比较慢. 经常打满100% *1. 打开任务管理器发现是 一个叫system和DCFWinService的服务一直在占用磁盘读写 2. 解决方向. 禁用掉…

    数据库 2023年6月14日
    0677
  • 心态崩了,我怎么知道实际生产环境的 B+ 树索引有多少层?

    Q:在实际生产环境中,InnoDB 中一棵 B+ 树索引一般有多少层?可以存放多少行数据? 关于这个问题最近好像在牛客上经常看到,感觉没啥意义,可能主要考察的是对 B+ 索引的理解…

    数据库 2023年6月6日
    094
  • 给小白的 PostgreSQL 容器化部署教程(上)

    作者:王志斌编辑:钟华龙 本文来自社区小伙伴 王志斌 的投稿。从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上。文章分为上…

    数据库 2023年5月24日
    0108
  • 配置中心Nacos(服务发现)

    服务演变之路 单体应用架构 在刚开始的时候,企业的用户量、数据量规模都⽐较⼩,项⽬所有的功能模块都放在⼀个⼯程中编码、编译、打包并且部署在⼀个Tomcat容器中的架构模式就是单体应…

    数据库 2023年6月9日
    0111
  • 线程池使用InheritableThreadLocal出现数据脏乱分析和解决方案

    背景 在测试环境上遇到一个诡异的问题,某些业务场景需要记录操作日志,有段时间发现记录的数据会被覆盖,例如当前用户的操作记录会被其他用户覆盖;这个现象是每次重启服务后一小段时间内就正…

    数据库 2023年6月6日
    0102
  • 从零开始的常用MySQL语句练习大全

    很多时候深入学习固然很重要,但是想要写下一篇给新手都能看得懂看的很香,并且老鸟可以查漏补缺的的练习博客,还是挺有难度,所以今天尝试写一些关于MySQL的语句练习大全,供想要从零开始…

    数据库 2023年6月11日
    085
  • 【SQL实战】期末考试,如何统计学生成绩

    年关将至,这两天所有小学都进入了期末考试阶段。在考试结束时,有必要清点学生的分数。有趣的是,学校提供的成绩单现在并不直接标明分数,而是一个等级,如优秀、良好、合格、不及格。至少北京…

    数据库 2023年5月24日
    0158
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球