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

MySQL事务处理:ACID属性基础与实现概览

前言

​ 本文核心思想就是介绍一下 Mysql ACID 的实现,至于事务、锁、redo 的底层结构及实现原理,后面会单独出文章介绍。之所以这样是不希望一篇文章过长,在闲暇时间就可轻易掌握一个知识点。

ACID 介绍

​ ACID 是数据库管理系统(DBMS)中事务处理的四个关键属性的首字母缩写,它们分别是:

  1. 原子性(Atomicity): 原子性确保事务中的所有操作要么全部完成,要么全部不执行。如果事务中的任何一个操作失败,整个事务都会回滚到开始状态,就像这个事务从未执行过一样。这保证了不会出现只完成部分操作的情况。
  2. 一致性(Consistency): 一致性确保事务从一个一致的状态转换到另一个一臀的状态。在事务开始之前和结束之后,数据库的完整性约束都必须保持不变。这意味着事务执行的结果必须符合所有预定义的规则,例如数据类型、触发器、约束等。
  3. 隔离性(Isolation): 隔离性确保并发执行的事务彼此独立,事务的中间状态对其他事务不可见。这可以通过多种隔离级别实现,包括读未提交(read uncommitted)、读已提交(read committed)、可重复读(repeatable read)和串行化(serializable)。不同的隔离级别可能会导致不同的并发问题,如脏读、不可重复读和幻读。
  4. 持久性(Durability): 持久性确保一旦事务被提交,它对数据库的更改就是永久性的,即使系统发生故障也不会丢失。数据库系统通常通过将事务日志写入非易失性存储来实现这一点,以确保即使在系统崩溃后也能恢复已提交的事务。
ACID 实现原理
原子性(Atomicity)

​ MySQL通过undo日志实现原子性。Undo日志记录了事务中的每个修改操作,以便在事务失败时能够执行相应的逆向操作,将数据库状态恢复到事务开始之前。

undo log属于逻辑日志,它记录的是sql执行相关的信息。当发生回滚时,InnoDB会根据undo log的内容做与之前相反的工作:对于每个insert,回滚时会执行delete;对于每个delete,回滚时会执行insert;对于每个update,回滚时会执行一个相反的update,把数据改回去。

题外话:事务不宜过大。一方面:事务过大的时候会产生大量的回滚日志,事务回滚的时候由于要沿着undo链条进行回溯,过大的事务日志会导致这个时间过长从而影响性能。另一方面:事务过大会导致主从延迟边长。

隔离性(Isolation)

​ 隔离性通过锁机制和多版本并发控制(MVCC)来实现。锁机制确保事务在修改数据时,其他事务不能同时修改同一数据。MVCC允许在不阻塞读操作的情况下,通过维护数据的多个版本来实现并发控制。

​ 可以从一下两个方面对隔离性进行考虑:

  1. 事务并发写:使用锁保证
  2. 事务并发读写:使用 MVCC 进行保证
持久性(Durability)

​ 持久性由redo日志(重做日志)来保证。Redo日志记录了事务对数据库所做的修改,确保在系统故障后,这些修改可以被重新应用到数据库中。

一致性(Consistency)

​ 一致性(consistency)是目的,原子性(atomicity)、隔离性(isolation)、持久性(durability)是手段。即通过原子性、隔离性、持久性来保证一致性。

结论

​ ACID属性是数据库事务处理的黄金标准,MySQL通过其内部机制精心实现了这些属性。理解这些原理对于数据库管理员和开发者来说至关重要,它们有助于设计出高效、可靠的数据库应用。

Reference
  1. MySQL官方文档:MySQL ACID
  2. 博客园:深入学习MySQL事务:ACID特性的实现原理
  3. 李学团博客:[MySQL教程(十)—MySQL ACID 实现原理]
http://www.lryc.cn/news/361575.html

相关文章:

  • PostgreSQL 修改表结构卡住不动
  • wvp-gb28181-pro搭建流媒体服务器,内存占用过高问题
  • 项目-双人五子棋对战: websocket的讲解与使用 (1)
  • 性能飙升50%,react-virtualized-list如何优化大数据集滚动渲染
  • 颠覆传统:探索Web3对传统计算机模式的冲击
  • 最适合上班族和宝妈的兼职副业,一天500多,小众副业项目
  • HFish蜜罐实践:网络安全防御的主动出击
  • vue3+three.js给glb模型设置视频贴图
  • SCARA机器人中旋转花键的维护和保养方法!
  • Linux运维-服务器系统配置初始化脚本
  • 暑期来临,AI智能视频分析方案筑牢防溺水安全屏障
  • 【第3章】SpringBoot实战篇之登录接口(含JWT和拦截器)
  • vue el-table使用、el-popover关闭、el-image大图预览
  • 星网智云总经理韦炜:低代码与智能制造融合,探索未来制造的无限可能
  • 3d模型批量渲图总是会跳怎么办?---模大狮模型网
  • 【距离四六级只剩一个星期!】刘晓艳四级保命班课程笔记(2)(可分享治资料~)
  • Java之Enum枚举类实践
  • Apache POI对Excel进行读写操作
  • 网络安全中攻击溯源方法
  • 软件设计不是CRUD(21):在流式数据处理系统中进行业务抽象落地——需求分析
  • 远控免杀篇
  • 基于单片机的超声波倒车雷达设计
  • 如何增加服务器的高并发
  • webservice、WCF、webAPI权限认证
  • Kafka之Producer原理
  • ubuntu20.04部署gitlab流程
  • C/C++动态内存管理(new与delete)
  • 搭建一个基于主流技术Spring Boot 2 + Vue 3 + Ant Design Vue的技术框架的简要步骤
  • 水电站生产指挥调度系统方案
  • 深度学习入门-第3章-神经网络