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

数据库事务的四大特性以及事务并发访问引起的更新丢失问题

文章来源:s默心的编程开发笔记

数据库事务的四大特性

数据库事务是指作为单个逻辑工作单元执行的一系列操作,要么完全的执行,要么全部都不执行。

和程序事务特性类似,数据库事务的四大特性,也就是所谓的 ACID

  • A代表原子性

原子性是指事物包含的所有操作,要么全部执行,要么全部失败回滚

  • C代表的是一致性

事务应确保数据库的状态从一个一致状态转变为另外一个一致的状态。

一致状态的含义是指数据库中的数据应满足完整性约束,以常见的转账为例:

假设用户 a和用户 b 两者的钱加起来一共是2000,那么不管 a和 b之间如何转账,转几次账,事务结束后,两个用户的钱相加起来应该还得是2000,这就是事务的一致性。

  • I 代表的隔离性。

隔离性是指多个事务并发执行时,一个事务的执行不应该影响其他事务的执行。

  • D代表的持久性

持久性是指一个事务一旦提交,它对数据库的修改应该永久保存在数据库中。

持久性意味着当系统或者介质发生故障时,确保已提交事务的更新不能丢失,即对已提交事务的更新能恢复,一旦一个事物被提交,DBMS 必须保证提供适当的冗余,使其耐得住系统的故障。所以持久性主要在于 DBMS的恢复性能,

以InnoDB为例,它会将所有对页面的修改操作写入一个专门的文件,并在数据库启动时从此文件进行恢复操作。

这个文件就是我们熟知的 redo log 文件, redo log 文件在这里保证了 InnoDB 的持久性。

事务隔离级别以及各级别下的并发访问问题
事务并发访问引起的问题以及如何避免

Mysql会利用锁机制创建出来不同的事务隔离级别

引起的问题:

  • 更新丢失——MySQL所有事务隔离级别在数据库层面上均可避免

更新丢失即一个事物的更新覆盖了另一个事物的更新,由于现在主流数据库都会自动为我们加锁,来避免这种更新丢失的情况,所以我们在这个数据库层面上不好模拟。

我们可以模拟一下它出问题的过程:

如上图所示,这里我们假设有两个事务同时对一个账户进行操作,它们分别是取款事务和存款事务。

它们同时开启事务,两个事务都对这个账户进行余额查账的动作,发现账户余额为100,此时存款事务向账户存入了20块钱,那么它的余额就变成了120元。它存入之后就提交了,

而取款事务并不知道此时存款事务已经提交了,它从账户里取出10元,并打算将这个余额改为90元。

在改成90元的时候,它就发现数据错乱了,取款事务便遇到异常而回滚了。回滚了之后这个余额就变成了100块钱。

这个时候存款事务再去查询,发现它之前做的更新操作,虽然提示提交成功,但是余额并没有变成转账后的余额,这就是所谓的更新丢失问题。

而更新丢失问题在数据库层面,不好模拟的原因就是 mysql innodb各种事务隔离级别在数据库层面上几乎已经避免了这种现象的发生。

因此小伙伴们想模拟的话,可以借助应用程序访问数据库的场景自己去模拟一下。

http://www.jsqmd.com/news/807986/

相关文章:

  • 西门子“工业软件驱动的数字孪生”模式
  • mac80211基础知识总结
  • HoRain云--PHP邮件发送终极指南
  • 快装管道售后服务测评? - 中媒介
  • 5分钟快速上手:res-downloader 全网资源下载神器终极指南
  • 告别固定尺寸:手把手教你用MATLAB Coder生成能处理任意大小数组的C函数
  • # 2026公考机构红黑榜!粉笔稳居第一,华图中公厮杀太激烈
  • RNN案例之:人名分类器
  • 2026年常州热缩管源头厂家深度横评:新能源汽车线束防护与工业级高分子材料定制解决方案 - 优质企业观察收录
  • 从‘Asia/Shanghai’到‘UTC’:一份给Python开发者的时区数据清洗与转换手册
  • 2026重庆靠谱装修公司测评:从施工、报价到售后,业主真实反馈 - 大渝测评
  • 广州市白蚁防治中心|越秀区/天河区/荔湾区/海珠区/白云区/番禺区专业灭白蚁公司推荐 - 品牌推荐大师
  • ComfyUI全面掌握-知识点详解——Comfy Cloud 部署与使用(注册、导航与对比)
  • 量子反馈电路中的动态相变与测量诱导纠缠研究
  • 智能车牌识别系统:YOLOv5+LPRNet深度学习引擎,车辆信息库+性能监控!
  • 【Flutter for open harmony 】Flutter三方库Dio网络请求+熬夜记录列表的鸿蒙化适配与实战指南
  • 1.ADC(采样和转换时间、常规单通道转换、定时器触发、串口示波器)
  • 从理论到实践:LMS自适应波束形成算法在干扰抑制中的实战解析
  • pyton笔记
  • 【Mem0】 源码剖析(一):Agent 的记忆危机与 Mem0 的三阶段管道——为什么 RAG 不够用?
  • AIoT 技术难点
  • 基于OpenAI API与社交平台集成的智能聊天机器人构建指南
  • 【架构实战】从业务逻辑到工程落地:私教预约系统的三大核心模型解析
  • 上海学瑜伽普拉提,2026年这篇看完就够了 - 速递信息
  • 手把手调试USB设备连接失败:Reset信号相关的常见坑与排查指南
  • ARMv8虚拟化中的HSTR_EL2寄存器原理与应用
  • 为什么 DISTINCT 加了 ROWNUM 反而数据变少了?揭秘 KES 与 PG 的执行优先级陷阱
  • 从热传导到细胞轨迹:一个公式讲明白Diffusion Map的数学直觉
  • 010、多旋翼飞行器结构与受力分析
  • QQ空间历史说说备份指南:GetQzonehistory让数字记忆永久留存