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

MySQL事务原理

在MySQL中并发执行多个事务,如果对同一批数据进行修改操作,就会导致出现脏写,脏读,不可重复读,幻读这些问题。
事务具有以下四个属性,简称ACID
原子性(Atomicity):当前失误的操作要么同时成功,要么同时失败。原子性由undo log日志来实现
一致性(Consistent):使用事务的最终目的,由其他3个特性以及业务代码正确的逻辑实现
隔离性(lsolation):在事务病房执行时,他们内部的操作不能互相干扰。隔离性由MySQL的各种锁以及MVCC机制来实现。
持久性(Durable):一旦提交了事务,他对数据库的改变就应该是永久性的。持久性由redo og日志来实现的。

脏写
当两个或多个事务选择同一行数据修改,有可能发生更新数据丢失,即最后的更新覆盖了由其他事务所做的更新。
脏读
事务A读取到了事务B已经修改但尚未提交的数据
不可重复读
事务A内部的相同查询语句在不同时刻读取的结果不一致
幻读
事务A读取到了事务B提交的更新数据

在隔离性中,对于事务的隔离级别及其对应产生的问题如下
在这里插入图片描述

其中MySQL默认的事务隔离级别为可重复读。

  • 大事务的影响 并发的情况下,数据库连接池容易被撑爆
  • 锁定的数据太多,造成大量的阻塞和锁超时
  • 执行的时间长,容易造成主从延时
  • 回滚需要的时间长
  • undo log容易膨胀
  • 容易导致死锁

优化方案

  • 将查询等数据准备操作放到事务外;
  • 事务中避免远程调用,远程调用要设置超时
  • 避免一次性处理的数据太多,进行拆分
  • 更新等涉及到加锁的操作可以放到最后
  • 能异步处理可以异步
http://www.dtcms.com/a/299887.html

相关文章:

  • C 与 C++ 的区别:发展、特性及优缺点详解
  • [1+2cos(ω)+2cos(2ω)+……+2cos(Nω)]sin(ω/2)=sin[(ω+1/2)N]
  • 【学习路线】Linux从入门到精通:系统化学习路线指南
  • 亚马逊测评采购:如何打造安全的环境,技术基础关键
  • Linux应用开发基础知识——Framebuffer应用编程(六)
  • 栈算法之【有效括号】
  • 在Word和WPS文字中要同时查看和编辑一个文档的两个地方?拆分窗口
  • 《Moco: Momentum Contrast for Unsupervised Visual Representation Learning》论文精读笔记
  • 固态硬盘SSD简介
  • 数字孪生映射探索驱动的具身导航!MorphoNavi:面向对象映射的空地机器人导航
  • Datawhale AI数据分析 作业3
  • 【深度学习新浪潮】什么是GUI Agent?
  • SpringMVC的请求执行流程是什么样的?
  • Houdini快速模拟烟雾
  • Tm.sys是什么文件
  • WLAN网络分类与详细对比
  • Unity 实现帧率(FPS)显示功能
  • Paimon Consumer机制解析
  • 守护汽车“空中升级“:基于HSM/KMS的安全OTA固件签名与验证方案
  • 通过redis_exporter监控redis cluster
  • 1. Qt多线程开发
  • JavaEE初阶第十一期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(九)
  • 第10篇:实战验收篇
  • 无需云服务器的内网穿透方案 -- cloudflare tunnel
  • 特产|基于SSM+vue的南阳特产销售平台(源码+数据库+文档)
  • 如何实现打印功能
  • 大话数据结构之 < 栈>(C语言)
  • Java中mybatis 无参构造器?你会吗
  • Spring AI 项目实战(二十):基于Spring Boot + AI + DeepSeek的智能环境监测与分析平台(附完整源码)
  • 修改site-packages位置与pip配置