最详细的:数据库的MVCC (并发控制机制)及 ACID 与 事务隔离级别,数据库恢复,知识记录总结!

MySQL ACID与MVCC浅谈 MySQL ACID与MVCC浅谈 前言 我们都知道在做事务的概念,就是一个完整的操作动作要么都执行,要么都不执行,这是一个不可分割的工作单位,ACID又是事务的四大特征。那么ACID具体是什么呢? ACID介绍 原子性(atomicity) 一个事务必须被视为一个不可分割的最小工作单元,整个事务中即使包含几个步骤,但所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。 一致性(consistency) 一致性是指事务必须使数据库.. 阅读详情

开篇

  • 这篇博客,大部分知识点来自于 课本 《数据库系统概论》 及 B站搜索的视频讲解,做下总结记录。

MySQL版本 5.6

  • 基础架构

一:事务的特性(ACID)与恢复机制:

什么是事务:
  • 事务是 用户所定义的一个数据库操作序列, 这些操作要么全做,要么全不做,是一个不可分割的工作单位。一个事务可以是一条sql语句,一组sql语句或整个程序。

(1)原子性

  • 事务时数据库中的逻辑工作单位,事务中包括的诸操作要么全做,要么都不做。保持原子的特性。

(2)一致性

  • 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。 一致性和 原子性密切相关,就如银行取钱,A账户取出一万元放到B账户,两个操作,A减少,B增加。 要么全做,要么全不做,都是处于一致性状态。

(3)隔离性

  • 事务之间是独立的,一个事务的执行不能被其他事物所干扰。既一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。

(4)永久性(持续性)

  • 顾名思义,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
ACID是事务管理的重要任务,遭破坏的情况
  • (1)多个事务并行执行时,不同事务的操作交叉执行
  • (2)事务在运行过程中被强制停止。
  • 解析:第一种情况,数据库管理系统必须保证多个事务的交叉运行,不影响事务的原子性。第二种情况下,数据库管理系统必须保证被强行终止的事务对数据库和其他事务没有任何影响。 这些就是数据库管理系统中恢复机制和并发控制机制的责任!!!。

数据库恢复

  • 保证数据库的安全性和完整性不被破坏,保证并发事务的正确执行 。
  • 恢复子系统: 是数据库系统的一个重要组成部分,相当庞大,占整个系统代码的10%以上!因为一些故障(种类很多),比方说难以预料,预防的 计算机系统硬件的故障,软件的错误,操作人员失误等,导致事务非正常中中断,影响数据库中数据的正确性,甚至破坏数据库,就需要这个数据库恢复功能,将数据库从错误状态恢复到某一已知的正确状态(就是一致性状态或者叫完整状态)。
  • 故障的种类:

    • (1)事务内部故障: 分为两种 可预期的,不可预期的。
      • 可预期的: 比如说A 向B转账的例子, 若A账户没有足够的金额,可能导致操作失败,是可预期的故障错误。程序可自动判断,然后程序内执行回滚等操作。
      • 不可预见的:占比较多,主要是不可预期的,不能由应用程序进行处理,如运算溢出,并发事务发生死锁,违反完整性限制等被终止。
      • 事务的故障意味着事务没有达到预期的的重点**(COMMIT或者显示的ROOLLBACK)** ,处于不正确的状态。
      • 事务撤销(UNDO): 就是恢复程序要在不影响其他事务运行的情况下,强行回滚该事务,及撤销该事务已经做出的任何对数据库的修改。
    • (2)系统故障: 指造成系统停止运转的任何事件, 使得系统要重新启动。比如说(CPU故障),系统断电,操作系统故障,DBMS代码错误等。
      • 这类故障是影响正在运行的所有事务的 ,但是不会破坏数据库。同样导致事务非正常终止,此时主存内容,尤其是数据库缓冲区(在主存)中的内容都丢失。一些尚未完成的事务的结果可能已经送入到磁盘中物理数据库里,影响数据的一致性。需要 恢复子系统在系统重启的时候,让所有的不正常事务都回滚,强行撤销所有未完成的事务。
      • 需要注意: 系统故障可能导致 已完成的事务可能有一部分甚至全部留在缓冲区,尚未写入到物理磁盘中的数据库中 ,这时候就不是需要撤销全部操作了,而是事务正常执行完提交操作,需要将这些已经提交的结果,重新写入数据库,称为:重做(REDO)。
      • 总结:重启系统一般有两个操作:UNDO 和 REDO。
    • (3)介质故障,又称为硬故障。系统故障称为软故障。
    • (4)计算机病毒 这些就不去介绍了。
    • 恢复的基本原理:冗余。数据库中任何一部分被破坏或数据不正确,可以根据存储在系统别处的冗余数据来重建。
  • 恢复的实现技术

    • 恢复机制涉及到两个关键问题:如何建立冗余数据 和 如何运用冗余数据实施数据库的恢复。
    • (1)建立冗余
      • 建立冗余数据最常用的技术是数据转储 和 登记日志文件(logging)。通常在一个数据库系统中,两种方法是一起使用的。
      • 1. 数据转储: 就是 数据库管理员定期将整个数据库复制到磁盘等存储介质上保存起来,这些后别的数据称为 后备副本。
        • 当数据库遭到破坏时,可以(1)重装后备副本,接着(2)继续运行所有更新事务,是数据库恢复到故障发生前的一致性状态。
        • 转储非常耗时,不能经常进行,应该定期,设置一个转储周期。
        • 静态转储:系统无事务运行的情况下,进行转储操作。
        • 动态转储:指进行转储期间,也允许对数据进行存取和修改。转储和事务可以并发执行,此时因为转储的过程中,还有事务进行运行, 那么打个比方: 当前转储 A字段值为 100,写入磁盘,但是当前事务有运行,将A修改为150,导致 转储的 A字段是过期数据。 要解决这个问题,就需要转储期间,对所运行的所有 事务对数据库的修改活动记录下来,建立日志文件(log file) 。 后备副本,加上日志文件,就能将数据库恢复到某一时刻的正确状态! 神奇,巧妙~
        • 根据场合还能分为 海量转储 和 增量转储。海量转储就是一次性转储全部数据库,增量转储,只是转储上一次转储到现在的 更新过的数据。
        • 一共分为如下四种了:
          在这里插入图片描述
      • (2)登记日志文件
        • (1)日志文件的格式和内容:
          • 日志文件是用来记录事务对数据库的更新操作的文件。基本分为两种格式,以记录为单位的日志文件, 以数据块为单位的日志文件。
          • 以记录为单位的日志文件:需要登录的内容包括:
            • 各个事务的开始(BEGIN TRANSACTION )标记
            • 各个事务的结束(COMMIT 或 ROLLBACK)标记
            • 各个事务的所有更新操作
            • 每一个事务的开始标记,结束标记,更新操作,均为日志文件的一个 日志记录(log record)
              • 每个日志记录的主要内容包括
                • 事务标识(标明是哪个事务)
                • 操作类型(增删改)
                • 操作对象(记录内部标识)
                • 更新前记录的旧值(增加操作,这里为空)
                • 更新后数据的新值(删除操作,这里为空)
          • 以数据块为单位的日志文件:
            • 包括:事务标识和被更新的数据块
            • 将更新前和更新后的整个块都放入到日志文件中。
        • (2)日志文件的作用
          • 日志文件可以进行事务故障恢复和系统故障恢复,并协助后备副本进行介质故障恢复
          • 1 事务故障恢复和系统故障恢复必须使用日志文件
          • 2 在动态转储中,必须建立日志文件。
          • 3 静态转储中,可以建立日志文件,当数据库毁坏后可重新装入后备副本,利用日志对已完成事务进行重做处理。
        • (3)登记日志文件:保证数据库是可恢复的,必须遵守两条原则
          • 登记的次序严格按照并发事务执行的时间次序
          • 必须先写日志文件,后写数据库。
      • (3)恢复策略
        • 事务故障恢复:事务在运行中非正常终止, 恢复子系统用 日志文件撤销(UNDO)此事务对数据库的修改。此过程对用户透明,系统自动完成。步骤如下
          • 1 反向扫描日志文件(从后往前找,最近的操作记录)查找该事务的更新操作。
          • 2 对该事务的更新操作执行逆操作,将日志记录“更新前的值”写入数据库。
          • 3 一直到读取到事务的开始标记,事务的恢复就算完成了
        • 系统故障的恢复:主要步骤就是 撤销故障发生时未完成的事务,重做已完成的事务。具体步骤:
          • 1 正向扫描日志文件(从头到尾)找出故障发生前已经提交的事务(有BEGIN TRANSACTION COMMIT 操作的事务) 将其标记到重做队列中(REDO-LIST)。同时找到尚未完成的事务,将事务标识记录到撤销队列中(UNDO-LIST)。
          • 2 对撤销队列中的各个事务进行撤销处理。反向扫描日志文件,进行撤销。
          • 3 对重队列的事务进行处理,正向扫描日志文件,对每个事务重新进行 日志文件的登记操作, 将更新后的值,写入到数据库。
      • (4)具有检查点的恢复技术
      • (5)数据库镜像 这些就不具体介绍了,我也不是很了解,一时间不容易读的很通透。

二: 事务隔离级别与缺陷:

  • 读取未提交(Read Uncommitted):
  • 读取以提交(Read Committed):
  • 可重复读(Repeatable Read):
  • 串行化(Serializable):
  • 事务的并发操作导致数据的不一致性包括下面几点:
  • 丢失修改
  • 脏读:
  • 幻读:
  • 不可重复读:

三:什么是并发控制?

(1)什么是并发控制?

  1. 事务是并发控制的基本单位,为了保证事务的隔离性和一致性,数据库管理系统需要对并发操作进行正确调度。这就是数据库中的 并发控制机制。

(2)并发操作带来的数据不一致性:

  • 1 丢失修改(lost update): 两个事务 T1 ,T2同时读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。举个例子。 T1 读到 A = 16 执行 A - 1 操作此时 A = 15. 但是 B读到A = 16, 执行 A - 1操作,导致 A 最后的值 还是 15, 丢失了T1的修改操作,最终结果本该是 14。
  • 2 脏读(dirty read): T1事务读入一个数据,并且修改了其结果写入磁盘数据库,T2事务此时读取了T1修改后保存到磁盘的数据,但T1因为某些原因,被撤销回滚,此时T2读到的就是脏的数据,这就是脏读,即读到不正确的数据。
  • 3 不可重复读(non-repeatable read):事务T1读取数据后,事务T2执行更新操作,使T1无法再次读取前一次读取的结果。具体的讲不可重复读包括以下三种情况:
    • (1) 事务T1读取某一次的数据后, 事务T2对其进行了修改,当事务T1再次读取该数据时得到与前一次不同的值。
    • (2) 事务T1按一定的条件从数据库中读取了某些数据记录后,事务T2 删除了其中的部分记录,当T1再次按相同条件读取数据时,发现数据神秘消失了。
    • (3)事务T1 按照一定条件从数据库中读取某些数据后,T2又插入了一些记录,当T1再次按照不同的条件进行读取数据时,发现多了一些数据。(幻读)
    • 幻读 : 2,3的情况,删除和增加操作,导致读取不一致,通常也被称为幻读,读取到的数据量不同。 不可重复读: 感觉多指情况1, 对已有的数据进行修改操作。
      在这里插入图片描述

(3) 并发控制机制

  1. 并发控制的技术主要有 封锁(locking),时间戳(timestamp), 乐观控制法,多版本并发控制(MVCC)。

  2. 1. 封锁:
    • 封锁是实现并发控制的一个非常重要的技术。事务对某个数据对象操作之前进行加锁,保证数据的安全性。 有两种:1. 排他锁(简称为X锁,写锁)。 2. 共享锁(简称为S锁,读锁)。 二者常称为:读写锁。
    • 排他锁: 又称为写锁。事务T对数据对象A加上X锁,则只允许T读取和修改A。期间其他事务不能对A加任何类型的锁,也不能读取和修改A。
    • 共享锁:又称为读锁。 若事务T对数据对象A加上S锁,事务A可以读A,但是不能修改A。 期间其他事务只能只能对A加上 S锁。保证了其他事务可以读A,但是在T释放A上的S锁之前不能对A做任何修改操作。
    • 封锁协议: 在运用X锁和S锁对数据对象进行加锁时,还要约定一些规则,不是随便加的。封锁协议就决定了合适申请X,S锁,封锁时间,何时释放等。下面一共介绍三级封锁协议。在不同程度上解决了 丢失修改,脏读, 幻读,不可重复读等问题。
      • 一级封锁协议
        • 介绍:事务T在修改数据R之前,必须先对其加上 X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。
        • 作用: 可以防止丢失修改,保证事务T是可恢复的。如图a
        • 图a,在对事务T1 进行修改之前先对 A加X锁。保证其他事务不能操作。
        • 解决:仅仅对数据进行读是不需要加锁的,它不能保证可重复读还有 脏读。
      • 二级封锁协议
        • 介绍:在一级封锁协议的基础上,增加事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
        • 作用:除了防止丢失修改,还进一步防止脏读。
        • 图c,事务T1 对C进行修改之前,先对C加上X锁,修改其值后,写回磁盘。这时T2 请求在 C 上加上S锁,需要等待 T1 释放X锁,只能等待。 T1因为某种原因被撤销,C恢复100,T1释放C上的X锁后,T2获得C上的S锁,读 C = 100. 避免了脏读。
        • 问题:因为读取完数据后即可释放S锁,所以它不能保证可重复读
      • 三级封锁协议
        • 介绍:在一级封锁协议的基础上增加了事务T在读取数据R之前必须先对其加S锁,(与二级的区别)直到事务结束才释放。
        • 作用: 防止了 丢失修改, 脏读, 不可重复读。
        • 图b, 事务T1 在读A,B之前,先对A,B 加S锁,这样其他事务只能对它们加 S锁,不能加X锁,保证其他事务只读不能修改它们。 直到T1 读取完后,计算结果,T1事务结束,T2才能获得B的X锁。
      • 图片:
        在这里插入图片描述
      • 总结:三种协议的主要区别在于 什么操作!需要申请封锁,以及何时释放锁(持锁时间)不同封锁协议是事务达到的一致性级别是不同的,封锁级别越高,一致性程度越高。如图总结:
        在这里插入图片描述
  3. 全称: Multi-Version Concurrency Control,多版本并发控制。

  4. 主要作用是提高数据库的并发性能。主要用来处理读请求(指的是快照度,而不是当前读)。

  5. 当前读: 悲观锁,就是需要使用锁来保证的,如,insert(排他锁), delete(排他锁),update(排他锁)操作, select lock in share mode(共享锁),select for update(排他锁),这些加锁的操作就是当前读。

  6. 快照读:普通的快照读。实现是基于多版本并发控制。就是MVCC,多版本,也就是说读到的数据不一定是当前最新的数据,有可能是历史版本的数据。

后序继续更新

MySQL的事务隔离级别、锁机制、MVCC的原理 MVCC(Multi-Version Concurrency Control,多版本并发控制)是 MySQL中 InnoDB 引擎实现高并发访问的核心机制,通过数据多版本化解决读写冲突,实现非阻塞读取。MVCC 相对于为每个修改保存一个版本,版本与事务时间戳关系,读操作只读该事务开始前的数据库的快照。它是通过数据库记录中的隐式字段 Undo Log、Read View 实现的。MVCC 可以很好地平衡好性能和数据安全性之间的关系,在不加锁的情况下避免多事务竞争带来的不可重复读、脏读、幻读的问题。 阅读详情

相关推荐

【深入理解MVCC版本链:数据库并发控制的核心密码】

MVCC版本链,数据库并发控制的核心密码!

qq_36021478的博客 1817

MySQL的ACID、死锁、MVCC问题

MySQL的ACID、死锁、MVCC问题

一朝风月 2235

CE 7.4中文版实战:如何用自动汇编功能快速生成游戏修改器(附CT表保存技巧)

本文详细介绍了CE 7.4中文版中自动汇编功能的使用方法,帮助用户快速生成游戏修改器。从环境配置、内存地址定位到自动汇编代码注入,再到CT表保存和独立EXE生成,提供全流程实战指南,适合逆向工程爱好者和游戏修改器开发者。

keras9composer的博客 356

数据库——mvcc简介

1.mvcc简介 1.1 什么是mvcc? MVCC是一种多版本并发控制机制。 1.2 mvcc解决什么问题? 我们在了解MVCC之前,首先先了解一下几个比较常见的锁。 读锁:也叫共享锁、S锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S 锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。写锁:又称排他锁、X锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到

Wild_Young的博客 1587

别再只盯着时序了!聊聊SDC里那些容易被忽略的‘配角’命令:工作条件、线载模型与面积约束

本文深入探讨了SDC(设计约束)中常被忽视的关键命令,包括set_operating_conditions、set_wire_load_model和set_max_area。这些‘配角’命令在芯片设计中扮演着至关重要的角色,影响时序收敛、功耗和面积优化。文章通过实际案例和最佳实践,揭示了如何正确配置工作条件、选择线载模型以及动态调整面积约束,以提升设计质量和效率。

weixin_26875109的博客 208

ais信号接收设备_国内首款基于软件无线电技术的AIS基站投入测试使用

星网宇达子公司北京凯盾环宇科技有限公司经过多年的潜心研发,成功研制出国内首台基于软件无线电(SDR)的CATON 9011 AIS基站。该基站采用软件无线电技术,利用软件数字技术代替传统的模拟电路,大大的降低了模拟器件的使用率,提高了基站的可靠性和使用年限。CATON 9011 AIS基站研制依据ITU-R M.1371-5、IEC 62320-1、IEC 61162-1等国际标准,兼容...

weixin_29057163的博客 2333

数据库ACID、隔离级别与MVCC

首先需要明确事务的概念:一组原子性的SQL查询,如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么就执行该组语句,否则所有语句都不执行。 事务有ACID四个特性,即: 原子性:一个事务是一个不可分割的最小工作单元,其操作要么全部成功,要么全部失败; 一致性:数据库总是从一个一致性状态转换为另一个一致性状态。所谓一致性状态,就是数据库的所有完整性约束(尤其注意用户定义约束

z69183787的专栏 1329

【异常】Warp终端AI功能403封禁报错I‘m sorry, I couldn‘t complete that request.Request failed with error: ErrorSta

本文针对Warp终端出现的AI功能定向封禁报错,完整还原脱敏后的报错信息、深度解读报错本质,并提供分优先级的全流程可落地解决方案,可直接用于技术排查、内部知识库归档。

奶爸的编程之路,也就一周冷个三天 265

什么是MVCC?ACID如何保证?四个隔离级别靠什么实现?

浅谈MVCC、ACID、隔离级别实现原理

boy_haiGuo的博客 895

从 Integrated Configuration 到 Integration Flow,SAP PI/PO 老配置迁移的一次温和重构

很多还在运行 SAP PI/PO 的系统,Integration Directory 里都积累了不少 Integrated Configuration,也就是日常项目里常说的 ICO。它们可能稳定运行了多年,负责把采购订单、物料主数据、客户主数据、发票、发货通知从一个系统送到另一个系统。问题在于,ICO 这种对象很实用,却不够直观。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 95

Win11更新导致TIA博途许可证出现问题的解决办法汇总

Win11更新导致TIA博途许可证出现问题的解决办法汇总

Robot_PLC_HMI_Automation 9888

从 MySQL 的事务 到 锁机制 再到 MVCC

转眼又一年~~2023马上就要到尾声了,在最后的几天中,我想给大家分享一下 MySQL 的一些小知识。在MySQL InnoDB引擎层面,又有新的解决方案 (解决加锁后读写性能问题),叫做MVCC(Multi-Version Concurrency Control)多版本并发控制。在MVCC下,就可以做到读写不阻塞且避免了类似脏读这样的问题。那MVCC是怎么做的呢?MVCC通过生成数据快照 (Snapshot)并用这个快照来提供一定级别 (语句级或事务级)的一致性读取。

船到桥头自然直 5299

Far planner代码系列(2)

graph_decoder系列(2) 承接上文 我们接着来看decoder_node.cpp的代码部分 void GraphDecoder::Init() { /* initialize subscriber and publisher */ //graph_sub_ 订阅节点/robot_vgraph 其类型是visibility_graph_msg/Graph的消息 graph_sub_ = nh.subscribe("/robot_vgrap...

博客 1533

【MySQL】事务?隔离级别?锁?详解MySQL并发控制机制

事务?隔离级别?锁?是不是很晕?详解MySQL并发控制机制

BugMan的博客 3567

MATLAB与图像处理(一):图像中结构张量的求法(Structure Tensor)

1.结构张量的作用:       能够区分图像中的平坦区域,边缘,角点; 2.图像中的结构张量的定义    1)是一个矩阵;    2)与图像的水平,垂直梯度有关,定义如下: 在MATLAB中,可以用如下语句求解:[Ix,Iy]=gradient(Image); 3)求出结构张量矩阵的行列式,和迹(矩阵对角线之和)   行列式:K=det(E);   迹:  

wenyusuran的专栏 5239

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

MySQL 事务管理全解:从 ACID 特性、隔离级别到 MVCC 底层原理

大家好,我是深耕 MySQL 内核与实战优化的博主。在业务开发中,事务是保证数据安全与一致性的核心基石,小到银行转账、火车票售票,大到电商订单系统,都离不开事务的支撑。但很多人对事务的理解只停留在begin/commit/rollback,对 ACID 特性、隔离级别、MVCC 底层原理一知半解,最终导致线上出现超卖、数据不一致、脏写等严重问题。

会当凌绝顶,一览众山小 1984

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ArcadeDB 事务机制详解:ACID 保证、MVCC 与并发控制

ArcadeDB 事务机制是这款多模型数据库可靠性的基石。作为一个同时支持 SQL、Cypher、Gremlin 以及 MongoDB、Redis、HTTP/JSON 协议的多模型数据库,ArcadeDB 在单机与 HA 集群模式下都提供完整的事务支持,其核心由 [TransactionContext.java](https://link.gitcode.com/i/0ca4369e8349fe0

gitblog_00241的博客 940

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

MySQL事务管理与并发控制:深入理解ACID特性

事务管理是数据库系统为确保数据一致性、可靠性和恢复能力而提供的一套机制。在 MySQL 中,事务是一个逻辑上的工作单元,它要么完全执行,要么完全不执行。事务管理的主要任务是保证事务的原子性、一致性、隔离性和持久性(ACID),并通过日志、锁、并发控制等手段实现对数据操作的控制。MySQL 的事务管理和并发控制是保障数据一致性、可靠性的重要机制。通过深入理解 ACID 特性和事务的实现原理,可以帮助我们更好地设计数据库系统并优化性能。

weixin_41859354的博客 1407

MySQL 进阶:事务与并发控制

事务(Transaction)是指一组数据库操作,它们要么全部成功,要么全部失败,即事务是数据库操作的最小单位。本篇文章介绍了 MySQL 事务的概念、ACID 特性、事务管理、事务隔离级别、并发控制机制及优化策略。

weixin_39899039的博客 1551

MySQL事务深度解析:ACID特性、隔离级别与MVCC机制

​隔离级别选择金融场景优先选择REPEATABLE READ(兼顾性能与一致性)。高并发读场景可使用READ COMMITTED减少锁竞争​长事务规避:MVCC依赖Undo Log保留旧版本,长事务可能导致存储膨胀​锁与MVCC协同:写操作仍需要加锁,但读操作通过MVCC实现无锁化,显著提升吞吐量通过ACID特性、多级隔离策略与MVCC的协同,MySQL在数据一致性与并发性能之间找到了精妙平衡。理解这些机制,有助于开发者根据业务需求合理设计事务逻辑,构建高可靠的数据库系统。

qq_51508784的博客 1472

MySQL【理论篇】03:ACID、MVCC【多版本并发控制】、隔离级别和锁

MySQL【理论篇】03:ACID、MVCC【多版本并发控制】、隔离级别和锁

weixin_40612128的博客 840

Mysql事务隔离级别、锁机制以及MVCC原理

for update)的语句,事务才真正启动,才会向mysql申请真正的事务id,mysql内部是严格按照事务的启动顺序来分配事务id的。都实现了MVCC机制,对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥,而在串行化隔离级别为了保证较高的隔离性是通过将所有操作加锁互斥来实现的。死锁指的是两个或多个事务在并发过程中,互相占用了对方所需的锁资源,并且都在等待对方释放,从而进入 无限等待 的状态。部分,详细描述了死锁涉及的事务、SQL 语句、等待的锁。事务在范围查询时使用了。

不积跬步无以至千里 1146

MySQL数据库:事务和ACID实现原理

数据库的事务是并发控制的基本单位,是指逻辑上的一组操作,要么全部执行,要么全部不执行。 1、事务的特性: (1)原子性:事务是一个不可分割的工作单元,事务里的操作要么都成功,要么都失败,如果事务执行失败,则需要进行回滚。 (2)隔离性:事务的所操作的数据在提交之前,对其他事务的可见程度。 (3)持久性:一旦事务提交,它对数据库中数据的改变就是永久的。 (4)一致性:事务不能破坏数据的完整性和业务的一致性。

张维鹏的博客 1万+

MySQL的事务隔离级别?MySQL的事务的特性(ACID)?MySQL的事务会出现哪些问题?当前读和快照读的区别?MVCC是什么?

在内部定义了一些匹配规则和当前的一些事务id判断该访问那个版本的数据,不同的隔离级别快照读是不一样的,最终的访问的结果不一样。来保证数据不丢失,在宕机的时候用redolog来恢复数据,由于Buffer Pool刷新磁盘是随机io,性能消耗大,redolog file(日志文件)是追加形式,是顺序io,性能好。隔离性的保证是通过,读已提交,读未提交,可重复度,串行化,MVCC多版本并发控制来保证的。一个事务修改数据,还没有提交,第二个事务就读到了没有提交的数据,也称为脏数据。

pangHu很菜 1万+

DM事务特性:深入解析达梦数据库的事务管理与优化机制

本文深入解析了DM数据库的事务特性,包括原子性、一致性、隔离性和持久性四大核心特性,以及多版本并发控制、事务隔离级别、死锁检测与处理、事务日志与恢复等高级特性。同时详细介绍了DM事务管理的实践方法,包括事务控制语句、事务性能优化和分布式事务支持,为企业级应用提供可靠的事务管理参考。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1840

MySQL事务全攻略:ACID特性、隔离级别与并发控制

摘要: MySQL事务通过ACID特性保障数据一致性,InnoDB引擎实现原子性(undo log)、持久性(redo log)、隔离性(锁机制与MVCC)。并发事务可能导致脏读、不可重复读和幻读,SQL标准通过四种隔离级别(读未提交、读已提交、可重复读、串行化)平衡性能与一致性。MySQL默认采用可重复读(RR)级别,并利用临键锁有效解决幻读问题。生产环境推荐使用InnoDB引擎,避免MyISAM因不支持事务导致的数据不一致风险。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1234
上一篇: 详细讲解:Python中二进制以及数值的特殊性,在位运算中需要注意的点
下一篇: 编程必备计算机基础知识总结:计算机组成原理,操作系统,计算机网络
我是py呀
博客等级 码龄8年 205粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值