MySQL 事务的 ACID 特性与应用

news/2024/9/21 4:03:53/

MySQL事务的ACID特性与应用

数据库事务 是保障数据一致性和完整性的关键机制。事务不仅是并发控制的核心,更是数据恢复的基本单位。本文将带你深入了解MySQL中的事务概念、ACID特性以及如何在实际应用中正确处理事务。

1. 什么是事务?

事务(Transaction) 是用户定义的一系列数据库操作序列,这些操作要么全部成功,要么全部失败。事务是一个不可分割的工作单位。

举例说明:银行转账

假设你要从账户A 转账10000元到账户B。这个转账操作可以定义为一个事务,包含以下两个步骤:

  1. A账户减少10000元: A = A - 10000
  2. B账户增加10000元: B = B + 10000

如果这两个操作中的任何一个失败,那么整个事务就会回滚,确保A账户的钱不会丢失

2. 事务的ACID特性

事务具有四个重要特性,统称为ACID

2.1 原子性(Atomicity)

原子性 保证了事务中的所有操作要么全部完成,要么全部不做。这是事务的最基本属性。

2.2 一致性(Consistency)

一致性 是指事务执行前后,数据库都必须处于一致性状态。换句话说,事务必须将数据库从一个有效状态 转换到另一个有效状态

2.3 隔离性(Isolation)

隔离性 保证了并发执行的事务不会互相干扰。一个事务的中间状态对其他事务是不可见的,直到该事务提交

2.4 持续性(Durability)

持续性 确保了事务一旦提交,其对数据库的修改将永久保存,即使系统崩溃也不会丢失数据。

3. 在MySQL中处理事务

MySQL中的事务处理分为隐式划分显式划分 两种方式。

3.1 隐式划分

在MySQL中,默认情况下AUTOCOMMIT 变量设置为 1,即自动提交模式。这意味着每一条修改语句都被视为一个事务,执行后立即提交。

示例: 在自动提交模式下,执行 UPDATE 语句后,修改立即生效,无需显式提交。

3.2 显式划分

当将 AUTOCOMMIT 设置为 0 时,MySQL不再自动提交事务,你需要手动控制事务的开始和结束。

  • 开始事务: 使用 START TRANSACTION 语句显式开始一个事务。
  • 提交事务: 使用 COMMIT 语句提交所有操作,将数据永久保存到磁盘。
  • 回滚事务: 使用 ROLLBACK 语句撤销所有操作,回到事务开始时的状态。

注意: MySQL中只有InnoDBBDB 存储引擎支持事务,其他存储引擎如MyISAM 不支持事务。

4. 如何提交事务

当事务正常结束后,使用 COMMIT 语句提交事务的所有操作,将其写入物理数据库

示例:事务提交前后的数据变化

  1. 在root用户下修改数据:
SET autocommit=0;
UPDATE Department SET office='C202' WHERE dno='D1';
SELECT * FROM Department:

image

  1. 在提交前查看数据:
SELECT * FROM Department;

image

此时修改结果仅保存在内存中,其他会话无法看到变化。

  1. 提交事务:
COMMIT;
  1. 在其他会话中查看提交后的数据:
SELECT * FROM Department;

image

此时,其他用户可以看到 D1 学院的办公地点已经更新为 C202

5. 如何撤销事务

使用 ROLLBACK 语句可以撤销事务的所有操作,回到事务开始时的状态。

示例:插入、修改并回滚

  1. 开始事务并插入新记录:
START TRANSACTION;
INSERT INTO Department VALUES ('D6', '文学院', 'D206', '成立于1982年');
  1. 修改新记录:
UPDATE Department SET office='E201' WHERE dno='D6';
  1. 回滚事务:
ROLLBACK;
  1. 查看回滚后的数据:
SELECT * FROM Department;

此时,D6 的所有操作都被撤销。

6. 保存点与回滚

在复杂的事务中,可以使用保存点(SAVEPOINT) 将事务划分为多个部分。当出现问题时,可以回滚到某个保存点,而不是回滚整个事务。

示例:回滚到指定保存点

  1. 开始事务并更新数据:
START TRANSACTION;
UPDATE Department SET office='E201' WHERE dno='D1';
SAVEPOINT S1;
UPDATE Department SET office='E202' WHERE dno='D1';
SAVEPOINT S2;
UPDATE Department SET office='E203' WHERE dno='D1';
  1. 回滚到保存点S1:
ROLLBACK TO SAVEPOINT S1;

此时,S1 之后的所有操作都被撤销,事务回到 S1 的状态。

7. 事务的执行方式

7.1 串行执行

在单处理器系统中,事务可以串行执行,即一个事务完成后,再开始下一个事务。这种方式虽然简单,但会导致系统资源浪费。

image

7.2 并发执行

事务的并发执行 是指多个事务交替执行,虽然不是严格的并行执行,但可以减少处理器的空闲时间,提高系统效率。

image

提示: 并发执行可能会导致数据冲突,因此需要考虑隔离性的影响。

总结

通过本文的讲解,你应该对MySQL中的事务概念和ACID特性有了清晰的理解。事务数据库操作的基本单位,ACID特性 确保了事务的可靠性,而显式事务处理保存点 提供了更灵活的控制。


http://www.ppmy.cn/news/1528220.html

相关文章

基于是springboot小区物业管理系统

小区物业管理系统 摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于小区物业管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了小区物业管理系统&#x…

[创业之路-146] :如何理解:复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情数字化,数字化的事情自动化,自动化的事情智能化

目录 一、复杂的事情简单化 二、简单的事情标准化 1、标准化的定义与意义 2、简单事情标准化的实施步骤 3、标准化的案例分析 三、标准的事情流程化 1、流程化的定义与意义 2、标准事情流程化的实施步骤 3、流程化的案例分析 四、流程的事情数字化 1、定义与意义 2…

001、Git开发流程规范

前言 本篇不详细介绍 Git 的使用,仅介绍基于 Git 的开发分支流程规范。 简述 Git 管理中,最重要的一个点就在于分支的管理。在项目开发中,一般涉及到 Git 的相关分支有: master/main: 主分支,版本正式发布的代码都用…

easy-es动态索引支持

背景 很多项目目前都引入了es,由于es弥补了mysql存储及搜索查询的局限性,随着技术的不断迭代,原生的es客户端使用比较繁琐不直观,上手代价有点大,所以easy-es框架就面世了,学习成本很低,有空大…

Spring Boot中使用注解拦截器实现通用校验器和基于角色的权限注解

通过使用Spring Boot的注解和拦截器,我们可以优雅地实现通用校验器和灵活的权限控制。本文将以电商交易系统为案例,详细讲解如何在Spring Boot中实现支持角色入参的权限校验器,以及如何通过注解拦截器实现通用校验器,提供高拓展性…

企业专用智能云盘 | 帮助企业便捷管控企业文档 | 天锐绿盘云文档安全管理系统

由于当前多数企业内部的办公文件普遍散落于各员工电脑中,导致存在诸多潜在的文档使用风险。为优化团队协作效率,天 锐 绿盘是一款集文档统一管理、高效协同于一体的企业云盘,帮助企业解决文档管理中的诸多难题。 【地址:点击了解天…

2024永久激活版 Studio One 6 Pro for mac 音乐创作编辑软件 完美兼容

Studio One 6是一款功能强大的音乐制作软件,由PreSonus公司开发。它提供了全面的音频录制、编辑、混音和母带处理工具,适用于音乐制作人、音频工程师和创作人员。 Studio One 6拥有直观的用户界面,使用户能够快速而流畅地进行音乐创作。它采…

Elasticsearch集群的运维与管理

【1】安装启动ES 集群 (1.1)集群架构规划 OS  ES versionIpnode.nameRolecluster.namees basedirCentOS Linux release 7.8.2003 (Core)elasticsearch-7.14.1 192.168.175.132:9200 cluster:192.168.175.132:9301 node_1 node.mastertrue …