Mysql事务相关

什么是事务

事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,好比大家同在一条船上,要活一起活,要完一起完 。

事务四大特性

原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这是可靠数据库所应具备的几个特性。

原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某一个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度,串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交,读提交,可重复读,串行化。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

ACID是靠什么保证的?

1、原子性是由undolog日志来保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功是sql。

2、一致性是由其他三大特征保证,程序代码要保证业务上的一致性。

3、隔离性是由MVCC来保证

4、持久性由redolog来保证,MySQL修改数据的时候会在redolog中记录一份日志数据,就算数据没有保存成功,只要日志保存成功了,数据仍然不会丢失。

脏读、不可重复度、幻读

  1. Dirty Read:脏读:一个事务读取到了中间结果(最终不一定提交,有可能rollback的结果)
  2. Fuzzy Read:不可重复读: 一个事务中前后两次读取同一个记录,读取的结果不相同。主要针对update操作,一个事务在更新过程中,其它事务更新并提交成功。
  3. Phantom:幻读:主要针对insert操作操作。一个事务在更新记录,另一个事务插入新的记录,看上去前一个事务没有生效。

事务的隔离级别

SQL 标准定义了四种隔离级别, MySQL 全都⽀持. 这四种隔离级别分别是:

  1. 读未提交(READ UNCOMMITTED): 读未提交, 也叫未提交读. 该隔离级别的事务可以看到其他事务中未提交的数据.

    因为其他事务未提交的数据可能会发⽣回滚, 但是该隔离级别却可以读到, 我们把该级别读到的数据称之为脏数据, 这个问题称之为脏读.

  2. 读提交(READ COMMITTED): 读已提交, 也叫提交读. 该隔离级别的事务能读取到已经提交事务的数据,

    该隔离级别不会有脏读的问题.但由于在事务的执⾏中可以读取到其他事务提交的结果, 所以在不同时间的相同 SQL 查询可能会得到不同的结果, 这种现象叫做不可重复读

  3. 可重复读(REPEATABLE READ): 事务不会读到其他事务对已有数据的修改, 即使其他事务已提交. 也就可以确保同⼀事务多次查询的结果⼀致, 但是其他事务新插⼊的数据, 是可以感知到的. 这也就引发了幻读问题. 可重复读, 是 MySQL 的默认事务隔离级别。

    ⽐如此级别的事务正在执⾏时, 另⼀个事务成功的插⼊了某条数据, 但因为它每次查询的结果都是⼀样的, 所以会导致查询不到这条数据, ⾃⼰重复插⼊时⼜失败(因为唯⼀约束的原因). 明明在事务中查询不到这条信息,但⾃⼰就是插⼊不进去, 这个现象叫幻读

  4. 串⾏化(SERIALIZABLE): 序列化, 事务最⾼隔离级别. 它会强制事务排序, 使之不会发⽣冲突, 从⽽解决了脏读, 不可重复读和幻读问题, 但因为执⾏效率低, 所以真正使⽤的场景并不多.

在这里插入图片描述

什么是MVCC

MVCC叫做多版本并发控制,实际上就是保存了数据在某个时间节点的快照。

什么是间隙锁

间隙锁(Gap Locks)是数据库中用于锁定索引范围的一种锁。它们的主要目的是防止其他事务在给定范围内插入新的数据,保证范围内数据的一致性和避免幻读现象。

当你执行一个范围查询并使用

SELECT … FOR UPDATE

或者在事务中执行某些操作时,数据库会为查询结果的范围使用间隙锁。这个范围包括了满足查询条件的现有数据行之间的间隙。

举个例子,假设你执行了一个范围查询

SELECT * FROM table WHERE id BETWEEN 10 AND 20 FOR UPDATE;

这个查询会获取范围在 10 到 20 之间的数据行,并且对这个范围的间隙(即 9 到 21 之间的索引空间)也会加上间隙锁,防止其他事务在这个范围内插入新的数据行。

间隙锁的作用是防止幻读(Phantom Read)的发生。幻读指的是在一个事务中,两次相同的查询返回了不同数量的行,这可能是因为其他事务在此期间插入了新的数据。通过间隙锁,数据库确保在范围查询期间,其他事务无法在查询范围内插入新的数据行,从而保证了查询结果的一致性。

需要注意的是,间隙锁可能会对并发性能产生一些影响,因为它会锁定索引范围而不是具体的数据行。因此,在设计数据库时需要权衡使用间隙锁对并发性能的影响以及数据的一致性需求。

参考:什么是间隙锁

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

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

相关文章

置换排列的数学表达与Benes网络

摘要 本文主要讨论如何使用Benes网络完成排列的置换操作,介绍Benes网络的构造,以及具体的路由方式。 置换排列 这里的排列指一个n个不同元素的序列,不同的顺序代表不同的排列。比如 [ 1 , 2 , 3 , 4 ] [1,2,3,4] [1,2,3,4]和 [ 2 , 1 , 4 …

优青博导团队提供生信分析整体解决方案丨组学技术服务、表观组分析、互作组分析、遗传转化实验、单细胞检测与生物医学

平民价格给您最优的技术服务——生物信息技术分析就找汇智生物 业务领域: 组学技术服务 、表观组分析、互作组分析、遗传转化实验、单细胞检测与生物医学 合作免费提供: 博导团队免费指导实验、免费解读实验结果、实验整体打包服务、免费论文润色 生物…

TAPD7.0焕新升级!助力企业数字化敏捷研发提效

近日,TAPD的7.0升级版本,不仅外观、引擎、协作焕新升级,大型产品规模化,敏捷‍‍‍‍‍‍‍‍更跨组织/地域,研发协作小团队更轻便。 腾讯TAPD7.0焕新升级! “外观”升级 导航革新:重塑导航栏…

windows10部署ChatTTS+Apifox调用

1 文件准备 准备好如下图所示的文件 2 修改ChatTTS_Win\ChatTTS\uilib\cfg.py 如下图所示,注释第34行,增加 WEB_ADDRESS 0.0.0.0:9998确保局域网内的其他设备也可以请求该服务。 3 启动服务 4 发送post请求 对应的请求内容如下: bash代…

字节推音乐生成神器 Seed-Music 支持多样化输入和精确控制

Seed-Music,字节跳动的最新音乐创作神器,能通过文字、音频等多种方式轻松生成音乐,仿佛拥有魔法般的魔力。它巧妙地融合了自回归语言模型与扩散模型,不仅确保了音乐作品的高品质,还赋予了用户对音乐细节的精准掌控能力…

【2025】中医药健康管理小程序(安卓原生开发+用户+管理员)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

电商商品详情API接口对电商跨境电商企业运营的好处

为了获取更大利益,电商商家经常需要使用价格,ERP接口系统。价格接口对电商商家有多方面的好处,主要体现在以下几个方面: 1、价格接口系统可以帮助品牌和商家实现更加科学和精准的定价策略。通过实时获取多个主流电商平台&#xf…

基于SpringBoot的智能排课系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 (一)选题来源与背景 高校的每学期伊始,排课是教务处工作中的重中之重。安排合理无资源冲突(教师、教室和设备等教学资源)的课表是教务工作必须面临的问题。传统的人工…

【Python】练习:控制语句(二)第1关

第1关:分支结构基础实训 第一题第二题第三题第四题(※)第五题(※)第六题第七题 第一题 #第一题 for temp in [-280, -100, 0, 20, 120, 200]:#请在下面编写代码# ********** Begin ********** #if temp>-273.15:F9/…

使用Rust直接编译单个的Solidity合约

这里写自定义目录标题 使用Rust直接编译单个的Solidity合约前言预备知识准备工作示例 使用Rust直接编译单个的Solidity合约 前言 我们知道,我们平常开发Solidity智能合约时一般使用Hardhat框架,但是如果你是一个Rustacean (这是由 “Rust” 和 “crust…

SpringBoot项目同时集成Mybatis和Mybatis-plus框架

1. 背景 Mybatis-plus可以生成CRUD,减少开发中SQL编写量,但是某些情况下我们需要多表关联查询,这时候Mybatis可以手写SQL的优势就体现出来了,在实际开发中,项目里面一般都是Mybatis和Mybatis-Plus公用,但是…

<<编码>> 第 14 章 反馈与触发器(8)--带预设和清零的触发器 示例电路

带预设和清零的边缘触发 D 型触发器 info::操作说明 将 “清零” 置为高电平可将 Q 置为 0; 将 “预设” 置为高电平可将 Q 置为 1; 注: 如果两者同为高电平, 则清零占优, 应避免同时出现 其余操作同上 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhtt…

0基础跟德姆(dom)一起学AI 数据处理和统计分析04-Panda入门

* Pandas数据结构介绍 * Series对象 * DataFrame对象 * Series常见操作 * 常用属性 * 常用方法 * 布尔索引 * 运算 * DataFrame常见操作 * 常用属性 * 常用方法 * 布尔索引 * 运算 * 更改操作 --- 1.Pandas数据结构介绍 * 图解 * 解释 * **DataFrame…

STM32最小系统核心板-SZPT领跑团队-C4

目录 一、团队介绍 队伍介绍 二、stm32f103c8t6构成 (1)概要 (2)构成 三、电路设计 (1)电源电路 (2)晶振电路 (3)SWD接口电路 (4).复位电…

[Leetcode 543][Easy]-二叉树的直径-递归

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 取一个结点的最大直径就是取一个结点的左子树最大深度右子树最大深度之和,因此可以定义一个递归函数,作用是取一个结点的最大直径。这个函数中还实现了求左子树最大深度…

Find My资讯|AirPods 4标准版充电盒无扬声器,Find My查找不会发出声音

苹果 AirPods 4 国行版标准版 999 元,主动降噪款 1399 元。标准版充电盒未内置扬声器,降噪版内置扬声器可用于查找功能。 苹果 AirPods 4 搭载 H2 芯片,引入计算音频技术,充电盒支持 USB-C 充电,体积比前代缩小 10% 以…

yolo车位数据集

停车场车位检测数据集是一个非常有价值的数据资源,它对于开发和训练能够自动识别停车位是否被占用的计算机视觉系统至关重要。以下是对这样一个数据集的详细介绍,以及如何使用这个数据集来训练YOLO(You Only Look Once)这样的目标…

nvm安装实现node多版本的切换

nvm安装实现node多版本的切换 方式一 下载安装包安装下载安装包解压安装设置 nvm 环境变量查看 nvm 是否安装完成安装 node 环境切换 node 版本列出已经安装的版本 方式二 一键脚本安装下载安装查看 nvm 是否安装完成安装 node 环境切换 node 版本列出已经安装的版本nvm相关命令…

基于yolov5的不同颜色安全帽检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv5的不同颜色安全帽检测系统是一种利用深度学习技术,特别是YOLOv5目标检测算法的创新应用。该系统旨在提高施工现场的安全管理水平,通过实时识别和检测工人佩戴的安全帽颜色,实现对安全规范的精准监督。 YOLOv5作为一…

GeoGebra 與數學探索 3 GeoGebra 在微積分的探索與動態演示

Goal: GeoGebra 除了可以輕鬆的讓我們以即時動態反饋圖形的方式模擬探索幾何的問題, 或是幫我們驗證答案, 也可以進行數論、微積分、矩陣等等各方面的探索, 在問題尺度不大又需要即時以圖像視覺呈現探索過程的情況下, GeoGebra 其實優於以寫程式的方式進行探索. “Talk is che…