首页 > 数据库 >mysql事务隔离级别与脏读、幻读、不可重复读

mysql事务隔离级别与脏读、幻读、不可重复读

时间:2022-12-08 16:07:02浏览次数:42  
标签:事务 数据 幻读 isolation read 脏读 提交 mysql 级别


mysql数据库,当且仅当引擎是InnoDB,才支持事务;

1、隔离级别

事务的隔离级别由低到高依次为分为:未提交读(read uncommitted)、已提交读(read committed)、可重复读(repeatable read)、串行化(serializable)。

1.1未提交读

A事务已执行,但未提交;B事务查询到A事务的更新后数据;A事务回滚;—出现脏数据

1.2已提交读

A事务执行更新;B事务查询;A事务又执行更新;B事务再次查询时,前后两次数据不一致;—不可重复读

1.3可重复读

A事务无论执行多少次,只要不提交,B事务查询值都不变;B事务仅查询B事务开始时那一瞬间的数据快照;

1.4串行化

不允许读写并发操作,写执行时,读必须等待;

mysql事务隔离级别与脏读、幻读、不可重复读_数据库


  脏读:(针对未提交的数据)一个事务在更新一条记录,未提交前,第二个事务读到了第一个事务更新后的记录,那么第二个事务就读到了脏数据,会产生对第一个未提交

数据的依赖。一旦第一个事务回滚,那么第二个事务读到的数据,将是错误的脏数据。

不可重复读:(读取数据本身的对比)一个事务在读取某些数据后的一段时间后,再次读取这个数据,发现其读取出来的数据内容已经发生了改变,就是不可重复读。

幻读:(读取结果集条数的对比)一个事务按相同的查询条件查询之前检索过的数据,确发现检索出来的结果集条数变多或者减少(由其他事务插入、删除的),类似产生幻觉。

2.数据库设置事务隔离级别

//查看当前事物级别:
SELECT @@tx_isolation;

MySQL 默认的级别是:Repeatable read 可重复读。

mysql事务隔离级别与脏读、幻读、不可重复读_数据_02

//设置mysql的隔离级别:
set session transaction isolation level 设置事务隔离级别
//设置read uncommitted级别:
set session transaction isolation level read uncommitted;

//设置read committed级别:
set session transaction isolation level read committed;

//设置repeatable read级别:
set session transaction isolation level repeatable read;

//设置serializable级别:
set session transaction isolation level serializable;


标签:事务,数据,幻读,isolation,read,脏读,提交,mysql,级别
From: https://blog.51cto.com/u_15906694/5922593

相关文章

  • mysql 表增加索引
    1.PRIMARYKEY(主键索引)mysql>ALTERTABLE`table_name`ADDPRIMARYKEY(`column`)2.UNIQUE(唯一索引)mysql>ALTERTABLE`table_name`ADD......
  • MySQL主从复制与读写分离
         一、MySQL主从复制1.1MySQL的复制类型基于SQL语句的复制(STATEMENT默认)在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语......
  • MySQL之MHA高可用配置及故障切换
    一、MHA的概述1、MHA的概念2.MHA的组成3.MHA的特点二、搭建MySQLMHA的操作步骤1、实验思路2、环境准备3、修改Master、Slave1、Slave2节点的主机名4、修改M......
  • Mysql中where if问题
    网上关于Mybatis中where与if的说法乱七八糟的,Myabtis官网写的很清晰。为了防止误导他人,在此记录:1.where语句+<if>标签<selectid="findActiveBlogLike"resultTy......
  • MySQL空间暴涨150G导致锁定,发生了什么
     背景12月1号中午突然收到大量报警,某客户环境操作数据库大量失败,报错信息如下图所示:这个报错我是第一次见,一时间有点无所适从,但是从字面意思来看是MySQL目前处于LOCK......
  • mysql group by 实现组内排序
    1、同一个分组中假如有三条数据,我们想要获取指定的第一条数据,作为查出来的数据2、第一步:通过时间排序,并将id拼接起来,截取第一个id,(也就是最新的一条id)selectSUBSTRING_......
  • MySQL InnoDB Cluster 恢复故障成员(数据库为5.7版本)
    问题:InnoDBCluster3个节点中,1个节点丢失,状态为:MISSING问题分析:因为发现问题比较晚。数据库配置的日志是7天循环删除的。也就是说当MISSING时间大于7天的时候,就不能直接......
  • 大数据-业务数据采集-FlinkCDC 读取 MySQL 数据存入 Kafka
    目录作用app产生各层数据的flink任务bean数据对象common公共常量utils工具类app.ods.FlinkCDC.javapackagecom.atguigu.app.ods;import......
  • centos7安装mysql6.5
    1、配置mysql6.5yum源wget-P.http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpmrpm-ivhmysql-community-release-el6-5.noarch.rpm清理yum源缓......
  • mysql的qps与tps等指标监控
    1.SQL概念StructuredQueryLanguage---结构化查询语言有数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句;数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语......