MySQL事务的隔离级别

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL事务的隔离级别

一、隔离级别概念

事务的隔离级别就是对事务并发的控制

MySQL支持的四种隔离级别是:

  1. TRANSACTION_READ_UNCOMMITTED:未提交读。说明在提交前事务A可以看到事务B的变化。这样脏读,不可重复读和幻读都是可能发生的。
  2. TRANSACTION_READ_COMMITTED:已提交读(oracle默认),说明读取未提交的数据是不允许的(防止脏读)。在这个级别不可重复读和幻读可能发生的。
  3. TRANSACTION_REPEATABLE_READ:可重复读(MySQL默认),说明事务保证能够再次读取相同的数据而不会失败,即使其他的事务把这个数据改了,你也不会看到前后两次查询的数据的不同,完全可以保证两次查询的结果是一样的,但是幻读仍然会出现。
  4. TRANSACTION_SERIALIZABLE:串行化,是最高的事务隔离级别,它防止脏读,不可重复读和幻读。串行执行,相当于是单线程操作,并发能力最低

image.png

  • 事务隔离级别越高,为避免冲突所花费的性能也就越多
  • 在可重复读级别,实际上可以解决部分的幻读问题,但是不能防止update更新产生的幻读问题,要禁止幻读产生,还是需要设置串行化隔离级别

两个MySQL客户端默认工作在可重复读级别

image.png

二、测试READ-UNCOMMITTED隔离级别

先设置为最低的隔离级别:未提交读

image.png

image.png

若此时A客户端rollback了,数据库中zhangsan的年龄恢复成了20,那这时候已经来不及了,B客户端拿着年龄21去做业务了

image.png

两个客户端都rollback,放弃当前事务对数据做出的改变,zhangsan的年龄恢复为20

image.png

三、测试TRANSACTION_READ_COMMITTED隔离级别

image.png

image.png

由于设置了已提交读隔离级别,事务B并没有发生脏读,这是由各种锁机制以及事务并发的MVCC版本控制实现的

image.png

查询到了已经commit的数据,发生了不可重复读,这在已提交读隔离级别是允许发生的

既然发生了不可重复读,幻读就肯定可以发生了

四、测试TRANSACTION_REPEATABLE_READ隔离级别

提交刚才事务,设置可重复读隔离级别

image.png

image.png

可重复读隔离级别:对于一个事务来说,可以放心读数据,就算有其他事务修改了数据并且已经提交了,也不会在当前事务表现出来。只要自己没改,数据都是不会变的

在可重复读隔离级别,测试幻读(在一定程度上防止了幻读,但没有完全防止)

image.png

可以看到,在当前的可重复读隔离级别,右侧事务无法查询到左侧事务insert的数据,虽然看不到,但由于左侧事务已经提交,数据库表中是存在name为aaa的数据的,由于MVCC控制,右侧事务无法看见。但可以直接操作这条看不见的数据,操作以后,数据可以出现

右边的客户端update左侧客户端insert的数据:

image.png

实际上,事务A已经插入并且提交了,aaa已经存在,因为事务B update aaa的年龄成功了

前后两次同样的查询,后一次查询与前一次查询的数据量不同,就发生了幻读。也就是可重复读隔离级别下,并没有解决幻读的问题,要彻底解决幻读,就需要设置串行化隔离级别

五、测试TRANSACTION_SERIALIZABLE隔离级别

image.png

由于事务B正在读数据,此时事务A再写数据就被阻塞了(用读写锁实现,允许读读,不允许读写或者写写)

MySQL server不会让自己执行事务的线程永远阻塞,导致当前线程占用的锁无法释放,而使得其他执行事务的线程也无法获得锁而永远阻塞。所以当线程等待时间过长时,会让超时线程释放锁,并会返回一个错误:

image.png



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9天前
|
存储 关系型数据库 MySQL
MySql创建带事务操作的存储过程
MySql创建带事务操作的存储过程
|
16天前
|
存储 关系型数据库 MySQL
mysql 事务基本介绍
mysql 事务基本介绍
|
1天前
|
SQL 关系型数据库 MySQL
MySQL数据库——事务操作-begin-commit-rollback
MySQL数据库——事务操作-begin-commit-rollback
6 1
|
2天前
|
存储 SQL 关系型数据库
探讨MySQL事务
探讨MySQL事务
6 1
|
3天前
|
存储 SQL 关系型数据库
MYSQL--(1.存储引擎 *2.事务*)
MYSQL--(1.存储引擎 *2.事务*)
|
3天前
|
SQL 关系型数据库 MySQL
【MySQL】事务?隔离级别?锁?详解MySQL并发控制机制
【MySQL】事务?隔离级别?锁?详解MySQL并发控制机制
14 0
|
9天前
|
SQL 存储 关系型数据库
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)二
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)二
19 0
|
9天前
|
SQL 关系型数据库 MySQL
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
MySQL数据库——基础篇总结(概述、SQL、函数、约束、多表查询、事务)一
20 5
|
9天前
|
SQL 安全 关系型数据库
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
14 1
|
10天前
|
存储 关系型数据库 MySQL
MySQL触发器 ,视图索引 , 事务
MySQL触发器 ,视图索引 , 事务

推荐镜像

更多