【MySQL】-事务以及隔离性问题

news2025/2/6 20:08:07

作者:学Java的冬瓜
博客主页:☀冬瓜的主页🌙
专栏:【MySQL】
分享:落霞与孤鹜齐飞,秋水共长天一色。——《滕王阁序》
主要内容:事务的概念,代码使用,事务的四大性质、隔离程度带来的问题,脏读、不可重复读、幻读,以及解决这些问题。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文章目录

  • 一、事务
    • 1、什么是事务?
    • 2、事务的使用
  • 二、事务的性质(ACDI)
    • 1、原子性(Atomic)
    • 2、一致性(Consist)
    • 3、持久性(Durable)
    • 4、隔离性(Isolated)-重点难点
  • 三、隔离性的深度剖析
    • 1、隔离与并发的关系
    • 2、隔离级别
      • @ (Read uncommitted)=》脏读
      • @ (Read committed)=》不可重复读
      • @ (Repeatable read)=》幻读
      • @ (Serializable)
    • 3、 隔离级别总结

一、事务

1、什么是事务?

概念:

事务:指的是逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。

2、事务的使用

begin/start transaction  -- 开启事务

执行多个SQL语句

commit;   --提交  
--(开启事务后,中间的这些SQL不会立即执行,而是先等着,
--等commit后再全部执行,保证了事务的原子性)

rollback  -- 回滚

二、事务的性质(ACDI)

1、原子性(Atomic)

原子性:把各个单元组成逻辑上的操作,这组操作要么全部成功,要么全部失败。这个组合成一个整体的过程就叫做原子性。
因为原子代表不可切分的最小单位,所以原子性代表事务不能分开,事务是一个整体。

2、一致性(Consist)

一致性:事务执行前后,数据都是合法状态。比如转账,转出账号减1000,转入账号就得加1000,保持一致。一致性依赖原子性实现。

3、持久性(Durable)

持久性:事务会把执行的过程先记录到硬盘上,再执行要进行的操作。
若发生断电等不可控情况,这些数据不会丢失,等下次设备正常时,mysql感知到上次执行到的中间状态,然后根据之前记录的过程进行回滚。

4、隔离性(Isolated)-重点难点

隔离性:一个数据库服务器,同时执行多个线程的时候,事务之间的"相互影响程度"。

三、隔离性的深度剖析

1、隔离与并发的关系

  • 要理解的一个重点:隔离程度越高,意味着事务之间并发程度越低,执行效率越慢,但是数据的准确性越高。 相反地,隔离程度越低,事务之间并发程度越高,执行效率越高,但是数据的准确性越低。
  • 因此,要选择效率还是准确性,要看具体的业务。比如CSDN点赞功能,不需要赞数特别精确,而要做到块,所以可以选择隔离程度低,从而使并发程度高,提高效率;而对于银行业务需要准确性,所以要做到隔离程度高,从而使数据的准确性高。

2、隔离级别

@ (Read uncommitted)=》脏读

例子:

场景一:
当物理老师周老师在备课的时侯(事务1),他的学生小明凑过来看老师写了什么(事务2),小明看到周老师老师给了一道关于天体运动的物理题,小明就离开了,然后回家自学天体运动的题。然而在小明走后周老师改变了主意,把天体运动问题,改成了一道动能定理的题。

分析:

  • 脏读指事务1在写数据的同时,事务2在读数据,也就是说写的数据还没提交,但是事务2读取到了,就叫做脏读
  • 在场景一中,周老师备课还没完成(相当于提交数据),小明就在一边看到了数据,造成最终小明看到的和课堂上讲的内容不一样。所以造成了脏读。也就是说,写的同时读,并且数据还没提交,可能会造成脏读问题。
  • 用read uncommitted 作为隔离条件,会出现脏读问题
  • 解决脏读问题的方法,就是在周老师备课的时候,小明不能看,把办公室锁上(手动狗头),也就是周老师完全备课完,小明才能翻看备课本,就是给写"加锁"。即写数据的事务1要把数据提交过后,事务2才能读取数据,就用到更深一层隔离read committed(提交后读)。

@ (Read committed)=》不可重复读

例子:

场景二:
Java老师李老师发现自己提交到git的代码有部分错误,所以李老师就在这时修改了代码并重新提交到git, 与此同时,小明正在看老师的代码,然而小明看到一半代码后,代码就改变了,小明陷入了沉思…

分析:

  • 不可重复读,是事务1在读数据的时候,事务2在修改事务1正在读的数据,事务2提交修改后,事务1看到的数据内容就变了。
  • 在场景二中,小明、在读git代码的同时,李老师把代码修改了,造成小明读代码读到一半,代码就改变了。就是说读的同时写,然后写提交数据后,读发生了改变,就是不可重复读问题。
  • 以read committed作为隔离等级,会出现不可重复读问题。
  • 解决不可重复读的办法,就是小明在读代码时,李老师不能改代码,就可以避免不可重复读的问题,也就是给读加"加锁"。即事务1在读取数据时,事务2不能修改数据,用到的更深一层隔离是Repeatable read(可重复读)

@ (Repeatable read)=》幻读

分析:

  • 幻读,就是事务1在读文件1的同时,因为用来Repeatable read,事务2不能修改文件1,但事务二可以对其它文件操作,比如加个文件2,这就是幻读。
  • 在场景二中,用了Repeatable read给读"加锁"后,Java老师李老师不能再修改(操作)小明正在读的文件了,但是李老师还可以操作其它文件,比如添加其他文件,这样小明在读当前Java文件时,会看到多出来一个文件。所以就出现了幻读问题。
  • 解决幻读问题方法,除了给当前文件的读和写"加锁",同时文件列表也"加锁"。就可以解决幻读问题了。这就用到了更深一层隔离,Serializable(串行化)

@ (Serializable)

  • 进一步解决了幻读问题,但是彻底放弃并发

3、 隔离级别总结

  • Read uncommitted,隔离级别最低,会发生脏读、不可重复读、幻读问题。数据准确性低;但是并发程度高,执行效率快
  • Read committed,对写"加锁"。隔离级别提高,解决了脏读问题,会发生不可重复读、幻读问题。数据准确性比第一个高,但整体来说准确性还是较低;并发程度比第一个低,效率减慢。
  • Repeatable read,对读和写"加锁"。隔离级别进一步提高,解决了脏读,不可重复读问题,会发生幻读问题。准确性较高;并发程度比第二个低,效率进一步减慢。
  • Serializable,对读和写"加锁",包括列表所有文件按。隔离级别最高,解决了脏读、不可重复读、幻读问题。彻底舍弃并发,效率最低。
  • 在MySQL中,Repeatable read 为默认隔离级别(可修改),也就是解决了脏读、不可重复读,不管幻读问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/102855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shell是运维人员必须掌握的技能

文章目录Shell是运维人员必须掌握的技能Shell、Python 和 Perl1) Perl 语言2) Python 语言3) ShellShell是运维人员必须掌握的技能 Linux 运维人员就是负责 Linux 服务器的运行和维护。随着互联网的爆发,Linux 运维在最近几年也迎来了春天,出现了大量的…

Stm32标准库函数4——BlueTooth采集串口AD数据发送给电脑或者单片机

#include "stm32f10x.h" //在该头文件中默认定义系统时钟为72M #include "delay.h" #include "sys.h" #include "usart.h" #include "adc.h" //将USB转串口模块的Txd引脚电平通过蓝牙模块传送到单片机Rxd;同时…

Linux编辑器-vim的使用

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于xwindow、 mac o…

Unity Addressables资源管理 分析器 AnalyzeRule

Addressables资源管理总目录 0.窗口位置 打开的窗口 1.Fixable Rules 可修复的规则 1.1 Check Duplicate Bundle Dependencies 检查重复的Bundle依赖项 此规则通过扫描所有使用BundledAssetGroupSchemas的组, 并投影asset组布局来检查可能冗余的asset。 …

微服务框架 SpringCloud微服务架构 微服务面试篇 54 微服务篇 54.6 Nacos与Eureka的区别有哪些?【服务发现】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务面试篇 文章目录微服务框架微服务面试篇54 微服务篇54.6 Nacos与Eureka的区别有哪些?【服务发现】54.6.1 Nacos 的服务拉取…

基于STM32单片机智能自动伸缩衣架雨滴重量光强温度检测伸缩速度可调-蓝牙版

实践制作DIY- GC0010-智能自动伸缩衣架 一、功能说明: 基于STM32单片机设计-智能自动伸缩衣架 功能介绍: 基于STM32F103C系列,LCD1602显示器,光敏电阻采集光强,雨滴传感器,ULN2003控制步进电机&#xff0…

【Redis实战专题】「技术提升系列」彻底分析探究Redission实现分布式锁的点点滴滴

Redission的简介 Redission 为 Redis 官网分布式解决方案 官网: Redisson: Redis Java client with features of In-Memory Data Grid 快速入门: https://github.com/redisson/redisson#quick-start github的Redission系列:https://github…

SpringCloud学习笔记——Eureka 和 Nacos注册

SpringCloud01 1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

2022年人工智能行业研究报告

第一章 行业概况 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质&…

电脑剪辑视频用什么工具?好用的视频剪辑工具推荐

电脑剪辑视频用什么工具?小编通过搜集,给大家带来了几款比较适合做视频剪辑的工具。 一、Windows自带视频编辑器 win10自带的免费视频编辑器吗?我相信很多人应该不知道吧!其实电脑自带的视频编辑器,也是可以进行裁剪视…

计算机毕业设计 SSM与Vue的宿舍后勤管理系统(源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 系统开发流程3.2.2 系统操作流程3.3 系统结构设计4 项目获取1 项目简介 Hi,各位同学好呀! 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品,【基于…

BCN基团endo-BCN-SS-NHS ester

【产品描述】 endo-BCN-SS-NHS ester中BCN基团可以发生相应的点击反应,二硫键在化学上是一条从结合硫醇而衍生的单共价键。它又称为二硫键或双硫桥,差不多只用于生物化学的范畴。 【中文名称】endo 丙烷环辛炔-双硫键-活性酯 【英文名称】 endo-BCN-SS-N…

【人脸识别】LBP人脸识别【含GUI Matlab源码 1282期】

⛄一、LBP简介 LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikinen, 和D. Harwood 在1994年提出,用于纹理特…

2022注定的不平凡我

这次的时光好像没有追溯了,追溯请看这一篇文章拜拜嘞——老东家 时间很短,变化很快,一时间还有些承受不了,入职的两个月零四天,很突然的我被炒鱿鱼了。 依稀记得那个周五,Hr找我谈话,说目前达…

在3568开发板上开发外设模块——竟如此简单!

针对这些模块,我们编写了9个实验做成了《itop-3568开发板驱动实验手册》,从实验原理、硬件连接、原理图分析、实验平台、实验步骤一步一步教大家如果配置使用这些模块。 后续《itop-3568开发板驱动实验手册》中的实验也会全部录制成视频教程!…

【Redis技术探索】「底层架构原理」帮你从底层彻底吃透RDB技术原理(入门第一步)

每日一句 低头是一种能力,它不是自卑,也不是怯弱,它是清醒中的嬗变。有时,稍微低一下头,或者我们的人生路会更精彩。 前提概要 Redis是一个的键-值(K-V)对的内存数据库服务,通常包含…

读取csv格式的数据--Pandas

1. 函数功能 读取逗号分隔数据的文件comma-separated values (csv) 2. 函数语法 pandas.read_csv(filepath_or_buffer, *, sep_NoDefault.no_default, delimiterNone, headerinfer, names_NoDefault.no_default, index_colNone, usecolsNone, squeezeNone, prefix_NoDefau…

氢燃料电池汽车的前景、主要优势及发展难点

氢燃料电池汽车的前景 氢燃料电池(电动)汽车的关键所在和奥秘之处,在于它的动力来源—氢燃料电池近乎完美和非常理想的工作原理与机制,它名义上叫“电池”,而实质上是一种基于化学原理,将作为“燃料”&…

java 瑞吉外卖 day5 套餐管理业务 套餐新增,套餐分页查询 套餐修改 套餐停售起售设置 短信服务

新增套餐 准备工作: 套餐信息分页查询 前面已经写了好几个分页查询了,这里查询的关键点,是套餐分类名称,不在套餐表中,我们要到别的表里拿,然后封装进setmealDto GetMapping("/page") public R p…

二维周期光栅结构的配置

摘要 复杂光学光栅结构被广泛用于多种应用,如光谱仪、近眼显示系统等。利用傅里叶模态法(FMM,或称RCWA) VirtualLab Fusion 提供了一种用于任意光栅结构严格分析的简单方法。利用图形用户界面,用户可以设置堆栈的几何形状,从而产生…