当前位置: 首页 > article >正文

MySQL 事务的 ACID 特性与应用

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.kler.cn/a/304809.html

相关文章:

  • 词嵌入方法(Word Embedding)
  • Coggle数据科学 | RAG编码模型对比:谁与OpenAI最为相似?
  • 工业相机选取
  • 【知识科普】SPA单页应用程序介绍
  • learn-F12 Performance(性能)前端性能分析(LCP,CLS,INP)
  • uniapp打包华为,提示请提供64位版本软件包后再提交审核
  • 分布式事务学习笔记(二)Seata架构、TC服务器部署、微服务集成Seata
  • Facebook的虚拟现实计划:未来社交的全新视角
  • 使用 LangChain 和 Neo4j 构建智能图数据库查询系统
  • SQL注入(数据库)简介
  • 【CVPR2024】Scaling Up Video Summarization Pretraining with Large Language Models
  • AI 加持的云端 IDE——三种方法高效开发前后端聊天交互功能
  • Machine Learning Specialization 学习笔记(2)
  • 响应式网站和自适应网站有什么区别?
  • LIMS实验室管理系统的特点
  • 音视频推流中使用wireshark进行抓包分析RTMP
  • 【第33章】Spring Cloud之SkyWalking服务链路追踪
  • 在AIoT设备上加速深度神经网络推理的进展:一项综述
  • Unreal Engine——AI生成高精度的虚拟人物和环境(虚拟世界构建、电影场景生成)(二)(技术分析)
  • 解决flume在抽取不断产生的日志文件时,hdfs上出现很多小文件的问题
  • UniApp 从Vue2升级为Vue3需要注意哪些方面
  • 微服务-- Sentinel的使用
  • 个人电脑可以当服务器用吗?
  • 服务器基础知识拓展( Linux 网络操作系统 03)
  • 京东广告投放平台整洁架构演进之路
  • 边缘计算智能网关的功能应用与优势-天拓四方