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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
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



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
1.请解释什么是MVCC,它在数据库中的作用是什么? 2.在MySQL中,MVCC是如何实现的?请简述其工作原理。 3.MVCC是如何解决读-写和写-写冲突的? 4.在并发环境中,当多个事务同时读取同一行数据时,MVCC是如何保证每个事务看到的数据版本是一致的? 5.MVCC如何帮助提高数据库的并发性能?
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
|
3月前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
5月前
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
2445 2
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
5月前
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(04)事务隔离级别、AICD、CAP、BASE原则一直搞不懂? | 看这篇就够了
本文详细介绍了数据库事务的四大特性(AICD原则),包括原子性、隔离性、一致性和持久性,并深入探讨了事务并发问题与隔离级别。同时,文章还讲解了分布式系统中的CAP理论及其不可能三角关系,以及BASE原则在分布式系统设计中的应用。通过具体案例和图解,帮助读者理解事务处理的核心概念和最佳实践,为应对相关技术面试提供了全面的知识准备。
|
6月前
|
关系型数据库 MySQL
mysql事务特性
原子性:一个事务内的操作统一成功或失败 一致性:事务前后的数据总量不变 隔离性:事务与事务之间相互不影响 持久性:事务一旦提交发生的改变不可逆
|
6月前
|
SQL Oracle 关系型数据库
南大通用GBase 8s 数据库封锁与并发事务调度介绍
南大通用GBase 8s 数据库封锁与并发事务调度介绍
|
6月前
|
关系型数据库 MySQL 数据库
MySQL事务隔离级别及默认隔离级别的设置
在数据库系统中,事务隔离级别是一个关键的概念,它决定了事务在并发执行时如何相互隔离。MySQL提供了四种事务隔离级别,每种级别都解决了不同的并发问题。本文将详细介绍这些隔离级别以及MySQL的默认隔离级别。
|
6月前
|
存储 关系型数据库 MySQL
MySQL 8.0特性-自增变量的持久化
【11月更文挑战第8天】在 MySQL 8.0 之前,自增变量(`AUTO_INCREMENT`)的行为在服务器重启后可能会发生变化,导致意外结果。MySQL 8.0 引入了自增变量的持久化特性,将其信息存储在数据字典中,确保重启后的一致性。这提高了开发和管理的稳定性,减少了主键冲突和数据不一致的风险。默认情况下,MySQL 8.0 启用了这一特性,但在升级时需注意行为变化。
149 1
|
6月前
|
Java 数据库连接 数据库
如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面
本文介绍了如何构建高效稳定的Java数据库连接池,涵盖连接池配置、并发控制和异常处理等方面。通过合理配置初始连接数、最大连接数和空闲连接超时时间,确保系统性能和稳定性。文章还探讨了同步阻塞、异步回调和信号量等并发控制策略,并提供了异常处理的最佳实践。最后,给出了一个简单的连接池示例代码,并推荐使用成熟的连接池框架(如HikariCP、C3P0)以简化开发。
161 2
|
7月前
|
数据库
什么是数据库的事务隔离级别,有什么作用
【10月更文挑战第21】什么是数据库的事务隔离级别,有什么作用
116 3

热门文章

最新文章