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

MySQL_事务的四大特性

1.事务的什么

在学习MySQL的初期,我们通常都是一个一个sql语句的执行,但是在实际开发过程中,我们经常是多个sql语句一起执行,这种多个sql语句在逻辑上要一起执行的就可以看做是一个事务,组成这个事务的多个sql,要不就全部成功执行,要不就全部执行失败;

2.事务的四大特性

1、原子性

        原子性是事务的最重要的也是最根本的性质,我们把多个操作打包成一个整体,要求这个整体的所有操作,要不就全部成功,要不就全部失败,避免了有些操作执行成功,有些操作执行失败了,从而导致产生了中间转态这样的错误的事情发生。我们就把多个操作打包成一个整体,就是事务的原子性。原子就是一个不可切割的整体。

       回滚机制

        事实上事务的每一句sql语句肯定都是要执行的,但是就会出现意想不到的情况,导致有些sql执行成功,有些sql就没有执行到,或者执行失败了,事务就能保证,当事务中的一条sql语句执行失败的时候,数据库就会自动把前面执行过的语句造成的影响给恢复回去,就好像事务的一句sql语句都没有执行那样,实际是数据库根据mysql的日志对数据库进行了恢复操作,我们就把数据库恢复成修改之前的样子称为回滚。

        为了实现回滚机制,数据库在执行事务的时候会记录日志,并把日志写到硬盘中,如果事务执行成功,就会删除掉日志,如果事务执行失败,数据库就会根据日志的操作,把数据库恢复

        1)进行了新增的操作,就把数据库新增的数据删除;

        2)进行了删除操作,就把删除的数据恢复;

        3)进行了修改操作,就把修改的数据恢复;

        4)进行查询操作,没有影响数据库的数据,就不进行任何操作;

2、一致性

        一致性指的是事务执行前后,数据的一致性,不会出现数据对不上的情况。可以理解成对数据库进行了修改了,修改之后的数据是符合要求的,是正确的。

        这也和回滚机制有关,如果事务执行失败,回滚之后的数据也是正确的,回到了事务执行前的转态;如果事务执行成功了,数据也是符合预期的,是正确的。

3、持久性

        一说到持久性,就要想到把数据存储到硬盘了。这里的持久说的也是把数据的存储到硬盘上,即使程序结束,电脑关机了,数据也还存在。如果是存储在内存上,那就是不持久,会因为程序结束或者电脑关机了,存储在内存中的数据就丢失了。

        事务对数据库进行的修改,数据存储到硬盘上,重启依然存在。

4、隔离性

        隔离性是事务的四个特性中最难理解,说是四个中最难,但实际上也不是很难;

        事务的隔离性,描述的数据库并发执行事务时候,产生的情况,数据库是支持多线程的,允许多个事务同时同时访问数据库,数据库服务器就需要把多个事务同时处理好,多个事务一起执行,就会发生以下的问题:

        1)“脏读”问题

                事务A正在对修改数据库中的数据,事务B就来读事务A修改后的数据,但是事务A在事务B读之后,又对事务B读取的数据库数据进行修改,这就会导致事务B读取到的数据和事务A实际提交的数据是不一样的,这个过程中事务B读取到的数据是事务A对数据库的数据修改的临时数据,而这个临时数据有可能就是错误的,我们称这种问题为“脏读”问题。

                对于“脏读”问题的处理方案,数据库就是对数据库的写操作进行加锁,就是说别的事务在写的时候,你就不会对数据进行读操作。

        2)不可重复读问题

                有了对写操作进行加锁,我们就不能再写的时候进行读操作,那我们就可以在写操作完成对数据进行读操作,但是在读的过程中,我们可以进行写操作,这就会出现读的时候,数据发生了变化,导致开始读的时候是结束读的数据是不一样的,这就是不可重复读问题。

                对于不可重复读问题,数据库的解决方案就是在进行读的时候,对读操作进行加锁,不能对数据进行写操作,这样以来就能避免不可重复读问题。

        3)幻读问题

                有了上面的两条规则,我们就不能在写的时候进行读,在读的时候进行写,但是如果事务A修改数据之后提交,事务B在读取数据,事务C不对B读取的数据进行修改,而是对对应的表进行增加/删除数据,这就会导致B读的数据集不一样,要先说明的是这里读的数据集原有的是一致的,就是条数多了或者少了,就是幻读问题,可以认为是不可重复读问题的特殊情况。

                对于幻读问题,数据库的解决方案,就是串行化支持执行事务,也就是一个事务接着一个事务执行,这时候数据库的准确率是最高的,效率是最低的,隔离性是最高的。

        四个隔离等级

        那么数据库对隔离性是如何体现的呢?

        mysql给隔离性提供了四个隔离等级,可以根据实际业务的需求等等,在配置文件中进行修改:

        1)read uncommitted(读未提交):允许读取其他事务未提交的数据,存在脏读+不可重复读+幻读问题,效率最高,准确率最低,并发程度最高,隔离性最低;

        2)read committed(读已提交):只允许读取已经提交事务的数据,对读加锁,解决了脏读问题,存在不可重复读+幻读问题,效率降低,准确率提高,并发程度降低,隔离性提高;

        3)repeatable read(可重复读):对读操作和写操作进行加锁,解决了脏读+不可重复读,存在幻读问题,效率又降低,准确率又提高了,并发程度再降低,隔离性又提高;

        4)serializable(可串行化):解决了脏读+不可重复读+幻读问题,效率最低,准确率最高,并发程度最低,隔离性最高。

        以上的四种事务的隔离级别的选择可以根据实际业务的不同进行选择,比如要做一个跟钱相关的业务,就可以选择串行化隔离级别,以实现最高的数据的准确性,要做一个点赞的系统,就可以选择“读未提交”隔离级别,最求最大的效率等等;

相关文章:

MySQL_事务的四大特性

1.事务的什么 在学习MySQL的初期,我们通常都是一个一个sql语句的执行,但是在实际开发过程中,我们经常是多个sql语句一起执行,这种多个sql语句在逻辑上要一起执行的就可以看做是一个事务,组成这个事务的多个sql&#x…...

如何在Jenkins上查看Junit报告

在 Jenkins 上查看 JUnit 报告通常有以下几个步骤: 构建结果页面: 首先,确保你的 Jenkins 构建已经执行完毕,并且成功生成了 JUnit 报告。前往 Jenkins 主页面,点击进入相应的项目或流水线。 构建记录: 选择你想查看的特定构建记…...

【深度学习】计算机视觉(CV)-图像生成-风格迁移(Style Transfer)

风格迁移(Style Transfer) 风格迁移是一种计算机视觉技术,可以将一张图像的内容和另一张图像的风格融合在一起,生成一张既保留原始内容,又带有目标风格的全新图像!这种方法常用于艺术创作、图像增强、甚至…...

Nginx 配置:alias 和 root 的区别

在 Nginx 的配置中,alias 和 root 是两个用于映射文件路径的重要指令。虽然它们的功能表面相似,实际使用中却有显著的差异。如果不清楚两者的用法和特点,可能会导致资源路径错误或访问异常。本文将详细解析它们的区别,并提供实用示…...

深入理解 QObject的作用

QObject 作为 Qt 库中所有对象的基类,其地位无可替代。几乎 Qt 框架内的每一个类,无论是负责构建用户界面的 QWidget,还是专注于数据处理与呈现的 QAbstractItemModel,均直接或间接继承自 QObject。这种继承体系赋予 Qt 类库高度的…...

在项目中调用本地Deepseek(接入本地Deepseek)

前言 之前发表的文章已经讲了如何本地部署Deepseek模型,并且如何给Deepseek模型投喂数据、搭建本地知识库,但大部分人不知道怎么应用,让自己的项目接入AI模型。 文末有彩蛋哦!!! 要接入本地部署的deepsee…...

JAVA中常用类型

一、包装类 1.1 包装类简介 java是面向对象的语言,但是八大基本数据类型不符合面向对象的特征。因此为了弥补这种缺点,为这八中基本数据类型专门设计了八中符合面向面向对象的特征的类型,这八种具有面向对象特征的类型,就叫做包…...

PostgreSQL学习的必要性

据分析师、运维工程师,还是技术决策者,掌握 PostgreSQL 都能带来显著的优势。以下是其必要性的核心要点:企业级开源数据库的首选 功能全面性:PostgreSQL 支持复杂的 SQL 查询、事务(ACID 特性)、多版本并发…...

使用 GPTQ 进行 4 位 LLM 量化

权重量化方面的最新进展使我们能够在消费级硬件上运行大量大型语言模型,例如 RTX 3090 GPU 上的 LLaMA-30B 模型。这要归功于性能下降最小的新型 4 位量化技术,例如GPTQ、GGML和NF4。 在本文中,我们将探索流行的 GPTQ 算法,以了解…...

【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步

【黑马点评优化】2-Canel实现多级缓存(RedisCaffeine)同步 0 背景1 配置MySQL1.1 开启MySQL的binlog功能1.1.1 找到mysql配置文件my.ini的位置1.1.2 开启binlog 1.2 创建canal用户 2 下载配置canal2.1 canal 1.1.5下载2.2 配置canal2.3 启动canal2.4 测试…...

【CUDA】Pytorch_Extensions

【CUDA】Pytorch_Extensions 为什么要开发CUDA扩展? 当我们在PyTorch中实现自定义算子时,通常有两种选择: 使用纯Python实现(简单但效率低)使用C/CUDA扩展(高效但需要编译) 对于计算密集型的…...

CPP集群聊天服务器开发实践(五):nginx负载均衡配置

1 负载均衡器的原理与功能 单台Chatserver可以容纳大约两万台客户端同时在线聊天,为了提升并发量最直观的办法需要水平扩展服务器的数量,三台服务器可以容纳六万左右的客户端。 负载均衡器的作用: 把client的请求按照负载均衡算法分发到具体…...

使用 NVM 随意切换 Node.js 版本

安装nvm https://github.com/coreybutler/nvm-windows/releases nvm安装详细教程(卸载旧的nodejs,安装nvm、node、npm、cnpm、yarn及环境变量配置)-CSDN博客 验证 NVM 是否安装成功-查看版本 nvm --version安装指定版本的 Node.js nvm i…...

百问网(100ask)的IMX6ULL开发板的以太网控制器(MAC)与物理层(PHY)芯片(LAN8720A)连接的原理图分析(包含各引脚说明以及工作原理)

前言 本博文承接博文 https://blog.csdn.net/wenhao_ir/article/details/145663029 。 本博文和博文 https://blog.csdn.net/wenhao_ir/article/details/145663029 的目录是找出百问网(100ask)的IMX6ULL开发板与NXP官方提供的公板MCIMX6ULL-EVK(imx6ull14x14evk)在以太网硬件…...

组件库地址

react: https://react-vant.3lang.dev/components/dialoghttps://react-vant.3lang.dev/components/dialog vue用v2的 Vant 2 - Mobile UI Components built on Vue...

2025.2.16机器学习笔记:TimeGan文献阅读

2025.2.9周报 一、文献阅读题目信息摘要Abstract创新点网络架构一、嵌入函数二、恢复函数三、序列生成器四、序列判别器损失函数 实验结论后续展望 一、文献阅读 题目信息 题目: Time-series Generative Adversarial Networks会议: Neural Information…...

最新智能优化算法: 中华穿山甲优化( Chinese Pangolin Optimizer ,CPO)算法求解23个经典函数测试集,MATLAB代码

中华穿山甲优化( Chinese Pangolin Optimizer ,CPO)算法由GUO Zhiqing 等人提出,该算法的灵感来自中华穿山甲独特的狩猎行为,包括引诱和捕食行为。 算法流程如下: 1. 开始 设置算法参数和最大迭代次数&a…...

使用 DeepSeek + 语音转文字工具 实现会议整理

目录 简述 1. DeepSeek与常用的语音转文字工具 1.1 DeepSeek 1.2 讯飞听见 1.3 飞书妙记 1.4 剪映电脑版 1.5 Buzz 2. 安装Buzz 3. 使用DeepSeek Buzz提取并整理语音文字 3.1 使用 Buzz 完成语音转文字工作 3.2 使用 DeepSeek 进行文本处理工作 3.3 整理成思维导图…...

【OS安装与使用】part4-ubuntu22.04安装anaconda

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 官网下载Anaconda(1)确认自己的系统型号与硬件架构(2)官网下载对应版本 2.2.2 安装Anaconda(1)基于shell脚本…...

把程序加入开机自启动

一、Windows 系统 方法 1:通过启动文件夹 1. 按下 Win R,输入 shell:startup,回车打开 **启动文件夹**。 2. 将应用程序的快捷方式复制到此文件夹中。 右键应用程序主程序(.exe)→ 创建快捷方式 → 拖动到启动文件夹。…...

介绍cherrypick

git cherry-pick 是 Git 中的一个强大命令,用于将一个或多个提交(commit)从一个分支应用到另一个分支。它允许你选择性地将特定的变更引入到当前分支,而无需合并整个分支。以下是对 git cherry-pick 操作的详细介绍: 1…...

Spring IoC DI:控制反转与依赖注入

目录 前言 - Spring MVC 与 Spring IoC 之间的关系 1. IoC 1.1 Spring Framework, Spring MVC, Spring boot 之间的联系[面试题] 1.2 什么是容器 1.3 什么是 IoC 2. DI 2.1 什么是 DI 3. Spring IoC & DI 3.1 Component 3.2 Autowired 4. IoC 详解 4.1 Applica…...

JavaAPI常用类型(包装类、BigDecimal类)

包装类 java语言是面向对象的语言,但是其中的八大基本数据类型不符合面向对象的特征。 因此java为了弥补这样的缺点,为这八种基本数据类型专门设计了八种符合面向对象特征的的类型,这八种具有面向对象特征的类型,统称为包装类&a…...

项目中一些不理解的问题

1.Mybatis是干啥的 他是用来帮我们操作数据库的,相当于是我们的一个助手: 我们想要得到数据库中的什么数据,就可以告诉mybatis,他会给我们想要的结果,同时,我们想要对数据库做出什么操作,也可…...

数字化转型4化:标准化奠基-信息化加速-数字化赋能-智能化引领

​随着经济增速的放缓,大国体系所催生的生产力逐渐释放,后续业务的发展愈发需要精耕细作,精益理念也必须深入企业的骨髓。与此同时,在全球经济一体化的大背景下,企业面临着来自国内外同行,甚至是跨行业的激…...

Lineageos 22.1(Android 15) 开机向导制作

一、前言 开机向导原理其实就是将特定的category的Activity加入ComponentResolver&#xff0c;如下 <category android:name"android.intent.category.SETUP_WIZARD"/>然后我们开机启动的时候&#xff0c;FallbackHome结束&#xff0c;然后启动Launcher的时候…...

“让App玩捉迷藏:Android教育平板的‘隐身术’开发实录”

1. 前言&#xff1a;一场App的“消失魔术” 在定制教育平板时&#xff0c;客户要求&#xff1a;“朕要某些App在桌面上消失&#xff0c;只能在系统设置里当个‘幽灵’&#xff0c;而朕一声令下&#xff0c;它们又得原地复活&#xff01;”于是&#xff0c;程序员们翻开了Androi…...

简单易懂,解析Go语言中的Channel管道

Channel 管道 1 初始化 可用var声明nil管道&#xff1b;用make初始化管道&#xff1b; len()&#xff1a; 缓冲区中元素个数&#xff0c; cap()&#xff1a; 缓冲区大小 //变量声明 var a chan int //使用make初始化 b : make(chan int) //不带缓冲区 c : make(chan stri…...

C++基础知识学习记录—模版和泛型编程

1、模板 概念&#xff1a; 模板可以让类或者函数支持一种通用类型&#xff0c;在编写时不指定固定的类型&#xff0c;在运行时才决定是什么类型&#xff0c;理论上讲可以支持任何类型&#xff0c;提高了代码的重用性。 模板可以让程序员专注于内部算法而忽略具体类型&#x…...

已解决IDEA无法输入中文问题(亲测有效)

前言 在使用IDEA的时候&#xff0c;比如我们想写个注释&#xff0c;可能不经意间&#xff0c;输入法就无法输入中文了&#xff0c;但是在其他地方打字&#xff0c;输入法仍然能够正常工作。这是什么原因呢&#xff0c;这篇文章带你解决这个问题&#xff01; 快捷键 如果你的I…...