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

MySQL事务的特性和隔离级别

一、事务的特性

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作,即这些操作要么同时成功,要么同时失败

事务的有以下四个特性(acid):

原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

A给B转钱:A减钱,B加钱的操作要么一起成功,要么一起失败

一致性(Consistency):事务完成时,必须是所有的数据保持逻辑上的一致。

A给B转钱:A少了多少钱,B多了多少钱,在客观世界要逻辑一致

隔离性(Isolation):数据库提供隔离机制,保证事务在操作数据库时,不收外部并发操作影响

A给B转钱:不受其他转钱操作,或者其他各种操作的影响

持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

A给B转钱:只要转成功了(提交了),A就永久的扣钱了,B就永久的加了钱,不会变回去

二、并发事务的问题

解决方案:

注意:事务隔离级别越高,数据越安全,但是性能越低

三、MySQL的undo log和 redo log

undo log和redo log都是MySQL的日志,那它们有什么区别呢?

1、redo log

首先我们先了解两个概念:

缓冲池(buffer poll):主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),以一定的频率刷新到磁盘,从而减少磁盘IO,加快处理速度

数据页(page):是InnerDB存储引擎磁盘管理的最小单元,每个页大小默认为16kb。页中存储的是行数据

redo log:重做日志,记录的是事务提交时数据页的物理修改,是用来实现事务的持久性的。

如果数据从缓冲池,写入MySQL磁盘之前宕机(或出现别的异常)就可以从redo log中恢复数据

redo log由两部分组成:重做日志缓存(redo log buffer,在内存中)以及重做日志文件(redo log file 在磁盘中)。当事务提交后,会把所有修改信息都存到该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用。

2、undo log

undo log:回滚日志,用于记录数据被修改前的信息,作用包含两个:提供回滚 和 MVCC(多版本并发控制)。undo log和redo log记录物理日志不一样,它是逻辑日志

可以认为当delete一条记录时,undo log还会保存一条对应的insert记录,反之亦然。

当update一条记录时,它记录一条对应相反的update记录。当执行rollback的时候,就可以从undo log中的逻辑记录读取到相应的内容进行回滚

undo log可以实现事务的一致性和原子性。

http://www.lryc.cn/news/539611.html

相关文章:

  • Oracle视图(基本使用)
  • C++ Primer 类的作用域
  • 【学习笔记】Cadence电子设计全流程(二)原理图库的创建与设计(上)
  • 学习数据结构(11)二叉树(堆)下
  • HarmonyOS NEXT网络状态监听HTTP和RCP请求网络
  • MySQL数据库(4)—— 数据类型
  • 如何在Odoo 18中创建记录规则Rule
  • petalinux高版本设置自动登录和开机自启动配置
  • 操作系统2.4
  • Springboot + Ollama + IDEA + DeepSeek 搭建本地deepseek简单调用示例
  • 解析DrugBank数据库数据|Python
  • CUDA Toolkit 历史版本 cuda安装
  • Aseprite详细使用教程(12)——轮廓工具和多边形工具
  • macos sequoia 禁用 ctrl+enter 打开鼠标右键菜单功能
  • 分布式架构与XXL-JOB
  • leetcode day18 移除元素 26+283
  • 【HarmonyOS Next】鸿蒙监听手机按键
  • 用Deepseek查询快证API-物流查询-实名认证-企业实名认证
  • 一个简洁高效的Flask用户管理示例
  • 分布式之分布式ID
  • (萌新入门)如何从起步阶段开始学习STM32 —— 0.碎碎念
  • 边缘计算网关与 PLC:注塑机车间数据互联新变革
  • LeetCode刷题---哈希表---347
  • LED灯闪烁实验:实验介绍
  • 论文笔记(七十二)Reward Centering(一)
  • C#之上位机开发---------C#通信库及WPF的简单实践
  • 使用 pjsua2 开发呼叫机器人,批量拨打号码并播放固定音频
  • 从函数到神经网络
  • 用自定义注解实现Excel数据导入中的枚举值校验
  • 网络安全技术pat实验 网络安全 实验