MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别

多表查询的内容已经告一段落了,接下来要学习的是新的一个内容——事务,将分为几个点进行学习:

  • 简介
  • 事务操作
  • 事务的四大特性ACID
  • 并发事务问题
  • 隔离级别
  • 小结

下面就先对事务进行一个简单大体的了解:

简介

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

比如下面的三个操作(张三给李四转账1000块钱):

  1.查询张三账户余额;

2.张三账户余额-1000;

3.李四账户余额+1000。

在一般情况下,

我们执行了操作1和2,若在2到3的过程中抛了异常,那么这时李四的余额就没有完成+1000的操作;但张三的账户余额仍减了1000,这就让张三白白丢了1000块钱了,显然不合理。


所以需要用事务来操作,将这些操作集并起来,


开启事务之后,执行操作1和2,当2到3的过程中抛了异常,这时就会回滚事务,重新回到操作1;


直到完成所有操作,才会提交事务。


默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

事务操作

查看/设置事务提交方式

SELECT @@autocommit;   -- 查看事务提交方式
 
SET @@autocommit = 0;   -- 设置事务提交方式
-- 0代表手动提交事务,1代表自动提交事务

当我们将事务提交方式改为手动提交之后,每执行一次SQL语句都需要COMMIT;来提交事务,否则只是临时修改了数据,而并没有将数据提交到数据库中去。


开启事务

START TRANSACTION 或 BEGIN;

开启事物之后,才会使得执行的语句变成手动提交;不同于上面的全局设置。

提交事务

COMMIT;

当所有操作都无误之后,我们就可以提交事物,将数据提交到数据库中。

回滚事务

ROLLBACK;

当操作出现异常时,需要将操作撤销,重新开始操作,称为回滚事务。

四大特性ACID

原子性Atomicity)

  • 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

当一个事务在执行时,它会将一组SQL语句放在同一批次内去执行。如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。

一致性(Consistency)

  • 事务完成时,必须使所有的数据保持一致状态。

例如,银行转账可以分解为两个动作:从A账户中扣除资金额X,然后将资金额X加到B账户中。如果在这个过程中发生了错误,那么整个操作都应该被回滚到初始状态。保证A和B加起来的账户余额要和初始状态一致。

隔离性(Isolation)

  • 数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

例如,一个事务正在修改某个数据项,此时另一个事务也想要修改这个数据项,但是由于隔离性的存在,第二个事务会等待第一个事务完成修改后再进行修改 。

持久性(Durability)

  • 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

事务一旦提交,它对数据库的改变就应该是永久性的(将数据提交保存在了硬盘中),接下来的其他操作或故障不应该对本次事务的修改有任何影响 。

并发事务问题

脏读

一个事务读到另外一个事务还没有提交的数据。

不可重复读

一个事务先后读到同一条记录,但两次读取的数据不同,称之为不可重复读。

幻读

一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。

要解决事务并发问题,就需要根据不同的并发问题来设置不同的隔离级别了

事务隔离级别 image.png 查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别

SET [SESSION GLOBAL /* 设置当前窗口的事务隔离级别 */ ] 
TRANSATION ISOLATION LEVEL [READ UNCOMMITTED | ......];1. SET

注:事务隔离级别越高,数据越安全,但是性能越低。

所以需要权衡事务并发问题与性能之间的天平,选择合适的隔离级别。

小结

1.事务简介

事务是一组操作的集合,这组操作,要么全部执行成功,要么全部执行失败。

2.事务操作

START TRANSACTION; -- 开启事务
COMMIT / ROLLBACK; -- 提交/回滚事务

3.事务四大特性

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

4.并发事务问题

脏读、不可重复读、幻读

5.事务隔离级别

READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE

END



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
SQL 机器学习/深度学习 Oracle
关系型数据库Oracle关键特性
【7月更文挑战第5天】
22 3
|
27天前
|
存储 关系型数据库 MySQL
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
MySQL数据库进阶第六篇(InnoDB引擎架构,事务原理,MVCC)
|
9天前
|
存储 Oracle 关系型数据库
Oracle数据库ACID特性
【7月更文挑战第6天】
23 6
|
19天前
|
关系型数据库 MySQL 测试技术
深入探索MySQL 8:隐藏索引与降序索引的新特性
深入探索MySQL 8:隐藏索引与降序索引的新特性
|
19天前
|
SQL 关系型数据库 MySQL
|
19天前
|
存储 关系型数据库 MySQL
mysql的InnoDB引擎实现ACID特性的原理
mysql的InnoDB引擎实现ACID特性的原理
|
22天前
|
SQL Java 关系型数据库
JAVA数据库开发 - 事务
JAVA数据库开发 - 事务
24 0
|
9天前
|
存储 关系型数据库 MySQL
探索MySQL:关系型数据库的基石
MySQL,作为全球最流行的开源关系型数据库管理系统(RDBMS)之一,广泛应用于各种Web应用、企业级应用和数据仓库中
|
7天前
|
关系型数据库 MySQL 网络安全
Mysql 数据库主从复制
在MySQL主从复制环境中,配置了两台虚拟机:主VM拥有IP1,从VM有IP2。主VM的`my.cnf`设置server-id为1,启用二进制日志;从VM设置server-id为2,开启GTID模式。通过`find`命令查找配置文件,编辑`my.cnf`,在主服务器上创建复制用户,记录二进制日志信息,然后锁定表并备份数据。备份文件通过SCP传输到从服务器,恢复数据并配置复制源,启动复制。检查复制状态确认运行正常。最后解锁表,完成主从同步,新用户在从库中自动更新。
921 6
Mysql 数据库主从复制
|
7天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。