MySQL事务 【事务操作丨事务四大特性丨事务隔离级别丨事务原理】

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MySQL事务 【事务操作丨事务四大特性丨事务隔离级别丨事务原理】

在实际的开发过程中,一个业务操作如:转账,往往是要多次访问数据库才能完成的。转账是一个用户扣钱,另一个用户加钱。如果其中有一条 SQL 语句出现异常,这条 SQL 就可能执行失败。

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

RDBMS = SQL语句 + 事务(ACID)

在这里插入图片描述

MySQL中可以有两种方式进行事务的操作:

  • 手动提交事务
  • 自动提交事务

手动提交事务

手动提交事务使用过程:

  • 执行成功的情况: 开启事务 → 执行多条 SQL 语句 → 成功提交事务
  • 执行失败的情况: 开启事务 → 执行多条 SQL 语句 → 事务的回滚

在这里插入图片描述

如果事务中 SQL 语句没有问题,commit 提交事务,会对数据库数据的数据进行改变。 如果事务中 SQL语句有问题,rollback 回滚事务,会回退到开启事务时的状态。

  • start transaction;begin;:开启事务。
  • commit;:提交事务。
  • rollback;:回滚事务。
-- 开启事务
start transaction;
-- 1. 查询张三余额
select * from account where name = '张三';
-- 2. 张三的余额减少1000
update account set money = money - 1000 where name = '张三';
-- 3. 李四的余额增加1000
update account set money = money + 1000 where name = '李四';
-- 如果正常执行完毕, 则提交事务
commit;
-- 如果执行过程中报错, 则回滚事务
-- rollback;

自动提交事务

MySQL 默认每一条 DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,语句执行完毕自动提交事务,MySQL 默认开始自动提交事务。

  • select @@ autocommit;:查看 MySQL 是否开启自动提交事务
  • set @@autocommit = 0;:取消自动提交事务

@@表示全局变量,1 表示开启,0 表示关闭

回滚点

在某些成功的操作完成之后,后续的操作有可能成功有可能失败,但是不管成功还是失败,前面操作都已经成功,可以在当前成功的位置设置一个回滚点。可以供后续失败操作返回到该位置,而不是返回所有操作,这个点称之为回滚点。

  • savepoint 名字:设置回滚点

  • rollback to 名字:回到回滚点

事务的四大特性 ACID

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务在执行前数据库的状态与执行后数据库的状态保持一致。如:转账前2个人的总金额是 2000,转账后 2 个人总金额也是 2000。
  • 隔离性(Isolation):数据库系统提供的隔离机制,事务与事务之间不应该相互影响,执行时保持隔离的状态。
  • 持久性(Durability):事务一旦提交或回滚,对数据库的修改是持久的。就算关机,也是保存下来的。

事务的隔离级别

事务在操作时的理想状态:所有的事务之间保持隔离,互不影响。

为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:

名字 隔离级别 脏读 不可重复读 幻读 数据库默认隔离级别
读未提交 read uncommitted
读已提交 read committed × Oracle 和 SQL Server
可重复读 repeatable read × × MySQL
序列化 serializable × × ×

上面的级别最低,下面的级别最高。隔离级别越高,性能越差,安全性越高。

脏读

一个事务读取到了另一个事务中尚未提交的数据。
在这里插入图片描述
比如B读取到了A未提交的数据。

不可重复读

一个事务中两次读取的数据内容不一致,要求的是一个事务中多次读取时数据是一致的,这是事务 update 时引发的问题。

在这里插入图片描述

事务A两次读取同一条记录,但是读取到的数据却是不一样的。

幻读

一个事务中两次读取的数据的数量不一致,要求在一个事务多次读取的数据的数量是一致的,这是 insert或delete 时引发的问题。
在这里插入图片描述

相关命令

查看事务隔离级别:

  • select @@tx_isolation;:查询全局事务隔离级别
  • select @@transaction_isolation;:查看事务的隔离级别

设置事务隔离级别:

  • set global transaction isolation level 级别字符串;:设置事务隔离级别
  • set session transaction isolation level 级别字符串;:设置当前窗口事务隔离级别

需要退出 MySQL 再重新登录才能看到隔离级别的变化

事务原理

事务开启之后, 所有的操作都会临时保存到事务日志中, 事务日志只有在得到 commit 命令才会同步到数据表中,其他任何情况都会清空事务日志(rollback,断开连接)。

在这里插入图片描述

事务的步骤:

  1. 客户端连接数据库服务器,创建连接时创建此用户临时日志文件。
  2. 开启事务以后,所有的操作都会先写入到临时日志文件中。
  3. 所有的查询操作从表中查询,但会经过日志文件加工后才返回。
  4. 如果事务提交则将日志文件中的数据写到表中,否则清空日志文件。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
24天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
轻松入门MySQL:保障数据完整性,MySQL事务在进销存管理系统中的应用(12)
|
26天前
|
存储 SQL 关系型数据库
【MySQL】4. 表的操作
【MySQL】4. 表的操作
21 0
|
3天前
|
SQL 关系型数据库 MySQL
MySQL8.0索引新特性
MySQL8.0索引新特性
|
24天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
3天前
|
存储 SQL 关系型数据库
MySQL 事务
MySQL 事务
|
17天前
|
存储 SQL 关系型数据库
【MySQL实战笔记】03.事务隔离:为什么你改了我还看不见?-02
【4月更文挑战第7天】数据库通过视图实现事务隔离,不同隔离级别如读未提交、读已提交、可重复读和串行化采用不同策略。以可重复读为例,MySQL使用多版本并发控制(MVCC),每个事务有其独立的视图。回滚日志在无更早视图时被删除。长事务可能导致大量存储占用,应避免。事务启动可显式用`begin`或设置`autocommit=0`,但后者可能意外开启长事务。建议使用`autocommit=1`并显式管理事务,若需减少交互,可使用`commit work and chain`。
30 5
|
30天前
|
关系型数据库 MySQL 测试技术
面试-MySQL的四种事务隔离级别
面试-MySQL的四种事务隔离级别
21 0
|
1月前
|
存储 缓存 关系型数据库
MySQL事务的四大特性是如何保证的
在MySQL数据库中还有一种二进制日志,其用来基于时间点的还原及主从复制。从表面上来看其和重做日志非常相似,都是记录了对于数据库操作的日志。但是,从本质上来看有着非常大的不同。
14 1
|
5天前
|
SQL 存储 关系型数据库
MySQL Cluster集群安装及使用
MySQL Cluster集群安装及使用
|
9天前
|
关系型数据库 MySQL 数据库
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
《MySQL 简易速速上手小册》第1章:MySQL 基础和安装(2024 最新版)
35 4