事务及事务的隔离级别

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

什么是事务

简单来说事务就是一组数据库操作要么全部成功,要么全部失败。Mysql的事务实现是在引擎层实现的。MyISAM 引擎不支持事务。

事务的隔离级别

提到事务,一定绕不开ACID,即:原子性、一致性、隔离性、持久性。今天聊聊事务的隔离性。

为什么要有隔离性?换句话说,隔离性解决了什么问题?当数据库里有多个事务同时执行的时候,可能出现:脏读、不可重复读、幻读的问题,后面会详细介绍。为了解决这些问题,就有了隔离级别的概念。**

SQL标准的隔离级别包括

  1. 读未提交,指的是,一个事务还没提交,它的修改就能被别的事务看到。
  2. 读提交,指的是,一个事务提交后,它的修改才能被别的事务看到。
  3. 可重复读,指的是,一个事务执行过程中看到是数据,总是跟事务启动时看到的数据一致。
  4. 串行化,指的是,读加读锁,写加写锁。当出现读写冲突时,只有等前面事务执行完成,后面的事务才能继续执行。

举个例子:

创建一个表t,只有一个字段c,并插入一行记录:

mysql> create table t(c int) engine=InnoDB;
insert into t(c) values(1);

我们来看看,在不同的隔离级别下,事务A查询的V1、V2、V3分别是多少:

  • 读未提交,事务A可以看到事务B未提交的修改,所以:V1、V2、V3的值都是2;
  • 读提交,事务B的修改在,提交后才能被事务A看到,所以V1=1,v2=v3=2;
  • 可重复读,事务A看到的结果跟启动时看到的结果一致,v1=v2=1,之后事务A提交,在查询v3的时候,此时事务B的更新能看到,所以v3=2;
  • 串行化,事务启动加读锁,之后因为读锁是共享的,所以事务B可以查询得到1,之后的修改操作,需要加写锁,读写锁互斥,所以修改等待,直到事务A提交释放读锁,事务B才能更新。所以,v1=v2=1,v3=2。

事务隔离级别的实现

理解了事务的隔离级别,我们再来看,事务的隔离级别是如何实现的,下面展开说明“可重复读”的实现。

在Mysql中,实际上每条记录在更新的时候都会在回滚日志(undo log)中记录一条回滚操作。记录的最新值加上回滚段,就可以得到前一个状态的值。

假设一个值从1被顺序更新为2、3、4,在回滚日志里就会有类似下面的记录

不同时刻启动的事务,有不同的视图,也就是说,一条记录在系统中可能有多个版本存在,这就是数据库的多版本并发控制(MVCC)。对于视图A来说,想要得到1,必须将当前值4,依次执行所有的回滚操作。

回滚日志的删除逻辑:系统判断当前系统里没有被这个回滚日志更早的视图的时候,就会删除该回滚日志。

尽量少使用长事务,因为长事务意味着系统里会存在很老的视图,为了保存这些回滚日志,浪费空间。长事务除了对回滚段的影响,也会占用锁资源,导致可能拖垮整个库。

事务控制语句

  • START TRANSACTION | BEGIN // 显示开启事务
  • COMMIT // 提交事务,并使得已对数据库做的所有修改持久化
  • ROLLBACK // 回滚事务,结束用户的事务,并撤销正在进行的所有未提交的修改

笔记参考于极客时间《MySQL实战45讲》


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
事务
事务 事务的基本介绍 1.概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败 操作 1.开启事务:start transaction 2.回滚:rollback 3.提交:commit 自动提交和手动提交
26 0
|
8天前
事务
事务 事务的基本介绍 1.概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败 操作 1.开启事务:start transaction 2.回滚:rollback 3.提交:commit 自动提交和手动提交
36 0
|
8天前
|
SQL
事务的隔离级别
事务的隔离级别 多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题。设置不同隔离级别就可以解决 1.脏读:一个事务,读取到另一个事务中没有提交的数据 2.不可重复读,在同一个事务中,两次读取的数据不一样 3.幻读:(dml)一个事务操作数据表中记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改 隔离级别 1.read uncommitted:读未提交 产生问题:脏读、不可重复读、幻读 2.read committed:读已提交 产生问题:不可重复读、幻读 3.repeatable read:可重复读 产生问题:幻读 4.serializable:串行
24 0
|
8天前
|
SQL 前端开发 大数据
什么是大事务?以及大事务产生的问题
什么是大事务?以及大事务产生的问题
85 0
|
9月前
|
人工智能 关系型数据库 MySQL
事务详解
事务是逻辑上的一组操作,要么都执行,要么都不执行。
46 0
|
10月前
|
算法 关系型数据库 MySQL
事务的隔离级别和对应的问题
事务的隔离级别和对应的问题
|
12月前
|
数据库
什么时候需要使用事务
什么时候需要使用事务
363 0
|
存储 Oracle 固态存储
深入理解事务
事务将应用程序的多个读、写操作捆绑在一起成为一个逻辑执行单元。即事务中的所有读写是一个执行的整体,整 个事务要么成功(提交)、要么失败(中止 或者 回滚)。如果失败,应用程序可以安全地重试。
16392 0
深入理解事务
|
SQL Java 大数据
事务详解(2)
你好看官,里面请!今天笔者讲的是事务。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
152 1
|
Oracle 安全 Java
事务详解(1)
你好看官,里面请!今天笔者讲的是事务。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。
85 2

热门文章

最新文章