当前位置: 首页 > 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 实现原理]

相关文章:

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

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

PostgreSQL 修改表结构卡住不动

目录 1 问题2 实现 1 问题 今天遇到的一个问题记录一下,因为系统上的一个改动需要同步脚本至测试库上,具体的脚本内容也很简单,就是修改了某张表的一个字段。但是无论怎么操作都是一直卡住,表的数据量很小就十几条数据所以初步怀疑是表被锁了…...

wvp-gb28181-pro搭建流媒体服务器,内存占用过高问题

直接给出解决办法,端口暴露的太多了,暴露了500个端口导致从3g---->11g 遇到的问题,直接使用镜像《648540858/wvp_pro:latest》在宿主机上运行,如我下面的博客 https://blog.csdn.net/weixin_41012767/article/details/137112338?spm=1001.2014.3001.5502 docker run …...

项目-双人五子棋对战: websocket的讲解与使用 (1)

项目介绍 接下来, 我们将制作一个关于双人五子棋的项目, 话不多说先来理清一下需求. 1.用户模块 用户的注册和登录 管理用户的天梯分数, 比赛场数, 获胜场数等信息. 2.匹配模块 依据用户的天梯积分, 实现匹配机制. 3.对战模块 把两个匹配到的玩家放到同一个游戏房间中, 双方通…...

性能飙升50%,react-virtualized-list如何优化大数据集滚动渲染

在处理大规模数据集渲染时,前端性能常常面临巨大的挑战。本文将探讨 react-virtualized-list 库如何通过虚拟化技术和 Intersection Observer API,实现前端渲染性能飙升 50% 的突破!除此之外,我们一同探究下该库还支持哪些新的特性…...

颠覆传统:探索Web3对传统计算机模式的冲击

随着Web3技术的崛起,传统计算机模式正面临着前所未有的冲击与挑战。Web3作为下一代互联网的代表,以其去中心化、安全可信的特性,正在颠覆着传统计算机模式的种种假设和局限性。本文将深入探讨Web3对传统计算机模式的冲击,并探索其…...

最适合上班族和宝妈的兼职副业,一天500多,小众副业项目

近年来,地方特色小吃逐渐受到人们的热烈追捧,尤其是在直播的助力下,许多地方的特色小吃得以走进大众视野,吸引了大量流量和人气。因此,有很大一部分商家和创业者看准了这一商机,纷纷投身于地方特色小吃的制…...

HFish蜜罐实践:网络安全防御的主动出击

引言 随着网络攻击手段的不断演进,传统的被动防御策略已难以应对复杂多变的安全威胁。HFish蜜罐作为一种主动防御工具,通过模拟易受攻击的服务,吸引攻击者,不仅能有效捕获攻击行为,还能为安全分析和溯源提供宝贵信息。…...

vue3+three.js给glb模型设置视频贴图

1.在网上下载一个显示屏或者自己画一个,在blender中设置好显示屏的Mesh,UV设置好,这样方便代码中添加纹理贴图。可以让美术在建模软件中,先随机设置一张图片作为纹理,验证UV是否设置好 关于如何 在blender中给模型设置UV贴图百度很多的 // 视频 import * as THREE from…...

SCARA机器人中旋转花键的维护和保养方法!

作为精密传动元件的一种,旋转花键在工作过程中承受了较大的负荷。在自动化设备上运用广泛,如:水平多关节机械手臂(SCARA)、产业用机器人、自动装载机、雷射加工机、搬运装置、机械加工中心的ATC装置等,最适…...

Linux运维-服务器系统配置初始化脚本

方案一 ,是一个简化的Linux服务器初始化脚本 下面这个是一个简化的Linux服务器初始化脚本示例,它包括了更新软件包、安装常用工具、配置网络和安全设置等基本步骤:这个脚本提供了一个基本的初始化配置示例,包括软件更新、安装工具…...

暑期来临,AI智能视频分析方案筑牢防溺水安全屏障

随着夏季暑期的来临,未成年人溺水事故频发。传统的防溺水方式往往依赖于人工巡逻和警示标识的设置,但这种方式存在人力不足、反应速度慢等局限性。近年来,随着视频监控智能分析技术的不断发展,其在夏季防溺水中的应用也日益凸显出…...

【第3章】SpringBoot实战篇之登录接口(含JWT和拦截器)

文章目录 前言一、JWT1. 什么是JWT2. 使用场景3. 结构3.1 Header3.2 Payload3.3 Signature 4. 使用 二、案例1.引入库2.JwtUtils3. UserController14. ArticleController 三、拦截器1. 定义拦截器2. 注册拦截器 四、测试1. 登录2. 无token3. 有token4. 全局配置 总结 前言 前面…...

vue el-table使用、el-popover关闭、el-image大图预览

1、html <el-table :data"list" :header-cell-style"{ background: #F7F8F9 }"><el-table-column type"index" width"100px" label"序号"></el-table-column><el-table-column prop"pic" l…...

星网智云总经理韦炜:低代码与智能制造融合,探索未来制造的无限可能

下文为广西星网智云总经理韦炜的演讲全文&#xff1a; 大家下午好&#xff0c;今天给大家分享一下玉柴的数字化转型过程&#xff0c;以及整个过程中我们会怎样使用低代码。 ﹀ ﹀ ﹀ #玉柴数字化战略 #两个要点 我们的数字化&#xff0c;是在公司的整一个战略转型下去做的。…...

3d模型批量渲图总是会跳怎么办?---模大狮模型网

在进行3D模型批量渲染时&#xff0c;有时会遇到一些问题&#xff0c;其中一个常见的问题就是渲染过程中出现跳帧或者跳图的情况。这不仅会影响到效率&#xff0c;还可能导致输出结果不符合预期。本文将介绍几种解决这一问题的方法&#xff0c;帮助读者更好地应对3D模型批量渲图…...

【距离四六级只剩一个星期!】刘晓艳四级保命班课程笔记(2)(可分享治资料~)

这一节是专门的听力课程&#xff0c;众所周知&#xff0c;咱们刘晓艳刘老师的口语不是特别的突出&#xff0c;当然口才是一流的☝️。 文章目录 听力预判听前预判 听力过程八大出题关键点视听一致同义转换 听完一道题后平时练习精听步骤 听力预判 听前预判 画关键词&#xff…...

Java之Enum枚举类实践

概述 项目中涉及到很多不变的业务变量,因此我们采用了Enum类来定义相关变量,采用Enum的原因 性能高,常量值的地址唯一,可以直接使用 来判断 完全单例,线程安全 项目实践 package com.bierce;/*** 审核流传状态枚举类*/ public enum FlowTypeEnum {START("开始"…...

Apache POI对Excel进行读写操作

1、什么是Apache POI ​ Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 Apache POI 的应用场景&…...

网络安全中攻击溯源方法

目前网络攻击已经成为常见的安全威胁之一&#xff0c;其造成的危害和损失都是不可估量的&#xff0c;因此网络攻击受到了高度重视。而当我们遭遇网络攻击时&#xff0c;攻击溯源是一项非常重要的工作&#xff0c;可以帮助我们迅速发现并应对各类网络攻击行为&#xff0c;那么网…...

软件设计不是CRUD(21):在流式数据处理系统中进行业务抽象落地——需求分析

本文主要介绍如何在数据处理系统中应用业务抽象的设计思想。目前业界流行的数据处理方式是流式处理&#xff0c;主流的流式处理引擎有Apache Spark&#xff0c;Apache Flink等等。本文选择Apache Flink作为实战案例的落地。由于本文主要是讲解设计思想和流式处理引擎相结合的方…...

远控免杀篇

0x00&#xff1a;前言 随着近两年hvv和红蓝对抗以及国家对于网络安全的重视&#xff0c;国内防护水平都蹭蹭上了一个台阶&#xff0c;不管是内部人员的技术水平提高还是防护设备的层层部署&#xff0c;均给了红队人员想要进一步行动设置了障碍。 通过weblogic的cve-2019-2725获…...

基于单片机的超声波倒车雷达设计

摘 要&#xff1a;文 章设计了一种基于单片机的超声波倒车雷达系统&#xff0c;以 AT89C51 型单片机作为控制核心&#xff0c;集距离测量、显示&#xff0c;方位显示和危险报警于一体&#xff0c;以提高驾驶者在倒车泊车时的安全性和舒适性。本设计采用 Keil 软件对系统程序…...

如何增加服务器的高并发

哈喽呀大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;随着互联网应用的普及和用户量的不断增加&#xff0c;服务器的高并发性能成为了开发者们面临的一项重要挑战。在处理大量并发请求时&#xff0c;服务器需要具备高效的处理能力和稳定的性能&#xff0c;以确保系统的…...

webservice、WCF、webAPI权限认证

webservice 权限认证 》》soapHeader SOAPHeader案例 》》 window 集成认证 在IIS里取消匿名访问权限&#xff0c;若允许匿名访问&#xff0c;就没有必须提供验证凭证了 R2RServiceSerialNumber sN new R2RServiceSerialNumber();sN.Url "http://172.xxxxx/R2RServi…...

Kafka之Producer原理

1. 生产者发送消息源码分析 public class SimpleProducer {public static void main(String[] args) {Properties prosnew Properties();pros.put("bootstrap.servers","192.168.8.144:9092,192.168.8.145:9092,192.168.8.146:9092"); // pros.pu…...

ubuntu20.04部署gitlab流程

参考&#xff1a; https://blog.csdn.net/weixin_57025326/article/details/136048507 362 wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/focal/gitlab-ce_16.2.1-ce.0_amd64.deb/download.deb367 sudo apt install gitlab-ce…...

C/C++动态内存管理(new与delete)

目录 1. 一图搞懂C/C的内存分布 2. 存在动态内存分配的原因 3. C语言中的动态内存管理方式 4. C内存管理方式 4.1 new/delete操作内置类型 4.2 new/delete操作自定义类型 1. 一图搞懂C/C的内存分布 说明&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在…...

搭建一个基于主流技术Spring Boot 2 + Vue 3 + Ant Design Vue的技术框架的简要步骤

搭建一个基于主流技术Spring Boot 2 Vue 3 Ant Design Vue的技术框架涉及前后端分离的开发模式。以下是一个简化的步骤指南&#xff0c;用于帮助你开始这个项目&#xff1a; 1. 后端&#xff08;Spring Boot 2&#xff09; 1.1 初始化项目 使用Spring Initializr&#xff08;…...

水电站生产指挥调度系统方案

一、方案背景 在碧波荡漾的大江大河之上&#xff0c;巍然屹立着一座座水电站&#xff0c;它们如同一个个巨人在默默地守护着我们的家园。在这些建设者的辛勤耕耘下&#xff0c;水电站在保障国家能源安全、优化能源结构以及减少环境污染等方面发挥着重要作用。 然而&#xff0c…...