事务基础知识

文章目录

  • 1. 事务的ACID
  • 2. 事务隔离级别
  • 2.1 数据并发问题
    • 2.2 MySQL中的四种隔离级别

1. 事务的ACID

  • 原子性(atomicity):
    原子性是指事务是一个不可分割的工作单位,要么全部提交,要么全部失败回滚。
  • 一致性(consistency):
    一致性是指事务执行前后,数据从一个合法性状态变换到另外一个合法性状态。这种状态是语义上的而不是语法上的,跟具体的业务有关
    举例:
    A账户有200元,转账300元出去,此时A账户余额为-100元。你自然就发现了此时数据是不一致的,为什么呢?因为你定义了一个状态,余额这列必须>=0。
    举例2:A账户200元,转账50元给B账户,A账户的钱扣了,但是B账户因为各种意外,余额并没有增加。你也知道此时数据是不一致的,为什么呢?因为你定义了一个状态,要求A+B的总余额必须不变。
    举例3:在数据表中我们将姓名字段设置为 唯一性约束,这时当事务进行提交或者事务发生回滚的时候,如果数据表中的姓名不唯一,就破坏了事务的一致性要求。
  • 隔离型(isolation):
    事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的并发执行的各个事务之间不能互相干扰。(通俗讲:一个事务对一张表中的记录执行操作,另一个事务不允许对这个记录操作)
  • 持久性(durability):
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。
    持久性是通过事务日志来保证的。日志包括了redo日志和undo日志。当我们通过事务对数据进行修改的时候,首先会将数据库的变化信息记录到redo日志中,然后再对数据库中对应的行进行修改。这样做的好处是,即使数据库系统崩溃,数据库重启后也能找到没有更新到数据库系统中的redo日志,重新执行,从而使事务具有持久性

2. 事务隔离级别

2.1 数据并发问题

脏写:一个事务已经commit了,但是由于另一个事务回滚了,导致没写进去。

脏读:一个事务读取到已经被另一个事务更新但是还没有提交的字段,之后若这个事务回滚了,读到的就是临时的数据,出现了脏读。

不可重复读:一个事务先读取了一个字段,另一个事务更新了字段并且commit了,之后原来事务再读同一个字段发现两次读取得数据不一致

幻读:一个事务从一个表中读取出字段,另一个事务对这个表插入了一些行,原事务再次读取这个表发现读到得行变多了。

2.2 MySQL中的四种隔离级别

READ-UNCOMMITTED:读未提交
READ-COMMITTED(Oracle默认级别):读已提交
REPEATABLE-READ(Mysql默认级别):重复读
SERIALIZABLE:串行化
在这里插入图片描述

Mysql下幻读解析:幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。更为具体一些: select某记录是否存在,不存在,准备插入此记录,但执行insert时发现此记录已存在,无法插入,此时就发生了幻读。

所以MysQL的幻读并非什么读取两次返回结果集不同,而是事务在插入事先检测不存在的记录时,惊奇的发现这些数据已经存在了,之前的检测读获取到的数据如同鬼影一般。

其实RR也是可以避免幻读的,通过对select操作手动加 行X锁(独占锁)(SELEC …FOR UPDATE这也正是 SERIALIZABLE隔离级别下会隐式为你做的事情)。同时,即便当前记录不存在,比如id = 3是不存在的,当前事务也会获得一把记录锁(因为InnoDB的行锁锁定的是索引,故记录实体存在与否没关系,存在就加 行X锁,不存在就加 间隙锁 ),其他事务则无法插入此索引的记录,故杜绝了幻读。 在 SERIALIZABLE隔离级别下,step1执行时是会隐式的添加 行(X)锁/ gap(x)锁的,从而step2 会被阻塞,step3 会正常执行,待事务1提交后,事务2才能继续执行(主键冲突执行失败),对于事务1来说业务是正确的,成功的阻塞扼杀了扰乱业务的事务2,对于事务1来说他前期读取的结果是可以支撑其后续业务的。
所以MySQL的幻读并非什么读取两次返回结果集不同,而是事务在插入事先检测不存在的记录时,惊奇的发现这些数据已经存在了,之前的检测读获取到的数据如同鬼影一般。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

专业的调查问卷平台推荐:提升数据收集与分析效率

无论是学生还是职场人士,想做好一份调查问卷,关键先要确定调查的主题,然后确定调查人群,编辑问题,最后能够尽可能的美化问卷调查的主题。 想要做到这几点,就要要求问卷调查平台: 1、能够帮助你快速制作出一…

初学者如何理解​session、cookie、token的区别与联系?

session、cookie、token。 相信学过接口的朋友都特别熟悉了。 但是对我一个刚接触接口测试的小白来说,属实有点分不清楚。 下文就是我通过查阅各种资料总结出来的一点理解,不准确的地方还请各位指正。 (文末送洗浴中心流程指南&#xff09…

面试题:说一下MyBatis动态代理原理?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.MyBatis简介2.使用步骤2.1、引入依赖2.2、配置文件2.3、接口定义2.4、加载执行 3.原理解析 1.MyBatis简介 MyBatis是一个ORM工具,封装了JDBC的操作&a…

大数据机房迁移该按照什么步骤进行 |数据中心

前言: 机房搬迁不仅仅是把机房的设备迁移到新机房那么简单,而是要求网络系统的迁移和集中存储系统的迁移必须安全平稳,不能过长时间影响生产应用。表面上就是几个IT 民工的搬运,但实际是一项目高度集中的体力与脑力的综合项目。现…

SUKER书客领跑百亿台灯行业发展,用实力树立护眼台灯国货典范

随着近年人们生活水平不断提高,许多人经过疫情后也更加关注生活健康,护眼台灯市场规模也在进一步扩大。因为市场有着广阔的空间,为此吸引了不少企业品牌入局,这也导致行业在近年内野蛮生长,“产品质量不符”、“不符安…

燃料电池汽车市场分析:预计2028年将达到118亿美元

燃料电池汽车( FCV) 是一种用车载燃料电池装置产生的电力作为动力的汽车。车载燃料电池装置所使用的燃料为高纯度氢气或含氢燃料经重整所得到的高含氢重整气。与通常的电动汽车比较, 其动力方面的不同在于FCV 用的电力来自车载燃料电池装置, 电动汽车所用的电力来自由电网充电的…

教你用AI做艺术字,2个月,在小红书接广赚7200元

有段时间没给大家拆账号和完整地上教程了!今天就来安排~如何用AI写艺术字,并且在小红薯实现商单BIANXIAN的系统教程.账号很多,我就拿这个AI艺术字搭配治愈系文案来展示下,这个比较有意思,艺术字治愈文案,视…

双指针算法(题目与答案讲解)

文章目录 题目移动零复写零两数之和N数之和(>2个数) 答案讲解移动零复写零两数之和N数之和 题目 力扣 移动零 1、移动零:题目链接 复写零 2、复写零:题目链接 两数之和 3、两数之和题目链接 N数之和(>2个数) 4、N数之和(三个数、四个数) 三个数:题目链接 四个数题目链接…

TDI网络过滤驱动应用(一)

文章目录 TDI网络过滤驱动应用1. 技术概览2. 数据包的抓取3. 应用实例3.1 TrafficShaper(限流)3.2 DnsRedirector(DNS重定向)3.3 TcpRedirector(TCP重定向) 4. 总结与参考 TDI网络过滤驱动应用 在前面的文章中,我们分析了TDI网络过滤驱动的基本开发框架以及TDI网络…

计算机视觉:使用dlib实现人脸检测

1 dlib介绍 Dlib是一个广泛使用的开源库,在计算机视觉和机器学习领域具有重要影响。它是由Davis King在2002年开发,主要用C语言编写,但也提供了Python接口。Dlib结合了高效的算法和易用性,使其成为学术界和工业界的热门选择。 1.…

VR特警野外武装仿真虚拟训练实操教学保证训练效果

特警VR模拟仿真训练软件的优势主要体现在以下几个方面: 真实感和沉浸感:通过VR技术,特警可以在虚拟环境中体验真实的训练场景,如人质解救、反恐行动等。这种真实感和沉浸感可以帮助特警更好地理解和适应实际情况,提高训…

香港人均gdp世界排名,和内地相比怎么样?

香港人均gdp世界排名,和内地相比怎么样? 香港作为世界贸易港口,也是中国最发达的城市之一。其经济相比于北上广深而言,都要发达。香港人均收入世界排名第18,人均收入为4.2万美元,在世界各国人均收入排名中处…

【古月居《ros入门21讲》学习笔记】09_订阅者Subscriber的编程实现

目录 说明: 1. 话题模型 图示 说明 2. 实现过程(C) 创建订阅者代码(C) 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程(Python) 创建订阅者代码(Python&…

什么是算法?

一、是什么 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制 也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出 …

【小聆送书第一期】让架构师的成神之路温暖你这个不景气的冬天

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言 书籍一览 ⛳️书籍一⛳️书籍二⛳️书籍三⛳️书籍四⛳️书籍五⛳️书籍六⛳️书…

【广州华锐视点】AI卡通数字人物帮助企业拓展更广阔的市场空间

随着科技的飞速发展,人类对于虚拟世界的探索愈发深入。从最初的文字和图片,到如今的音频、视频,再到未来可能的虚拟现实,我们一直在寻求与虚拟世界更加紧密的联系。在这个过程中,AI卡通数字人物作为一种新兴的角色&…

操作系统 day14(进程同步、进程互斥、互斥的代码实现)

进程同步 概念 进程的异步性体现在,例如:当有I/O操作时,进程需要等待I/O操作,而每个I/O操作又是不同的,所以进程没有一个固定的顺序,固定的时间来执行,而这体现了进程的异步性。 进程互斥 …

数据库管理-第118期 记一次开启附加日志导致的性能问题(202301129)

数据库管理-第118期 记一次开启附加日志导致的性能问题(202301129) 本周二凌晨,为了配合某国产数据库从Oracle数据库能够实时同步数据,在X9M那套一体机上做了开启附加日志的操作,也正是因为这个操作带来了一些小问题。…

【STM32】OLED显示屏

1 调试方式 1. 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息 2. 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上 3. Keil调试模式:借助Keil软件的调试模…

STM32g70开启定时器死机原因

在做低功耗产品时,检查发现由于之前开启了BOOTLOADER升级程序,修改了中断向量FALSH起始地址,只在KEIL TARGET IROM1中修改了, 而忘记在程序文件system_stm32f10x.c里修改中断向量表flash起始地址 system_stm32f10x.c里&#xff0…
最新文章