Mysql--事务

事务

开始之前,让我们先想一个场景,有的时候,为了完成某个工作,需要完成多种sql操作
比如转账在这里插入图片描述
再比如下单
第一步 我的账户余额减少
第二步 商品的库存要减少
第三步 订单表中要新增一项

事务的本质,就是为了把多个操作,打包成一个操作来完成的,让着多个操作要么能全部都执行成功,要么就一个都不执行,这就是原子性
注意一个要点,这里的一个都不执行,不是真的没执行,执不执行成功,得执行了才知道

回滚

假设事务中有三个操作,顺序是先执行1,再执行2,再执行3
真正执行之前,是不知道哪一步会出错的,如果是执行到中间出错了,就需要自动把前面已经成功执行的操作,进行还原,还原到最初没有执行的模样,这个还原数据的过程,叫做回滚(rollback)
本质上,这里的没执行,不是真的没执行,而是看起来就跟没执行一样
回滚是咋实现的呢?
只要把事务中执行的每个操作,都记录下来(此处的记录是通过特定的日志,来记录数据库事务操作的中间过程),如果需要回滚,就直接按照之前操作的“逆操作”来执行就可以了。(上个操作如果是插入,逆操作就是删除),回滚保证了事务的原子性

在这里插入图片描述

事务的使用

(1)开启事务:start transaction;
(2)执行多条SQL语句
(3)回滚或提交:rollback/commit;
说明:rollback即是全部失败,commit即是全部成功。

start transaction;
-- 小白账户减少2000
update accout set money=money-2000 where name = '小白';
-- 小郭账户增加2000
update accout set money=money+2000 where name = '小郭';
commit;

在这里插入图片描述

事务的基本特性(面试必考)

1.原子性:保证多个操作被打包成一个整体,要么能够全部执行正确,要么就一个都不执行
2.一致性:事务执行之前和事务执行之后,数据能对上
3.持久性:事务这里执行的各种操作,都是持久生效的(最终写入到硬盘中的),一旦事务执行成功了,这里的所有操作产生的修改,都是写到硬盘里的
4.隔离性:并发执行事务的时候,隔离性会在执行效率和数据可靠之间做出权衡,“隔离”描述的是同时执行的事务之间,相互的影响,隔离性越高,并发性越低,数据越可靠,性能就越低
并发执行事务过程中,可能产生以下几种问题
(1).脏读问题
假如我学习很好,在写老师布置的代码作用,我的舍友啥也不会,这时候正好看见我在写作业,于是就过来吵我的,但是最后老师公布成绩的时候,我全对,舍友错了点儿,为什么呢?
是因为舍友抄的是我临时写的代码,我在他抄完了,发现有一部分代码错了,然后修改了,这时候舍友不知道我改了,他提交的是我的旧的代码,我舍友就形成了“脏读”
如何解决脏读问题呢?
给写操作加锁!!
一个事务A写的时候,其他事务不能读了,知道事务A写完并提交数据之后,其他事务才能来读
引入了写加锁,降低了两个事务之间的并发性,提高了隔离性,降低了效率,使数据更准确了
(2).不可重复读
我在这写代码,其他同学想看代码,我跟他们说好了我必须提交到码云之后(这是一个事务),同学们再来读,我写完代码之后提交,这时候同学们正在读
当同学们正在读的时,我继续修改这段代码了(这是另一个事务),修改完毕,我又一个提交
这就导致同学这边读的时候,代码突然就变样了,可能同学们好不容易理解的之前的代码,现在又要重新理解了
在同一个读取数据的事务中,可能会涉及到多次读操作,多个读操作读到的数据可能会不一样
如何应对不可重复读呢?
就是给读操作也加锁!!
给写操作加锁的意思是我在写的时候,别人不能读(除非我写完了提交了,别人才能读),此时,别人读的过程中,我还可以再开启一个新的事务来写,第二个事务提交之前,其他读事务读到的都是旧版本的数据,第二个事务提交之后,别人再读,就是新版本的数据了
给读操作加锁的意思是别人读的时候,我不能写了!进而并发程度又进一步降低了,执行效率也降低了,相反,隔离性进一步提高了,数据可靠性也提高了
(3).幻读
还是我在写代码的时候,和同学们约定
写加锁,我写的时候,提交之前,大家别看
读加锁,同学们读的时候,我不能修改代码
但是我觉得闲着也是闲着,还不如创建一个新的类(假设之前操作的是student类,现在我创建出一个新的teacher类)来编写代码
这样就导致了同学们读者读者,虽然student类没变,但是突然冒出来了一个teacher类
幻读就是一个事务在多次读的过程中,虽然读到的数据是一样的,但是结果集不同,比如第一次读的是十条记录,第二次读的是十一条记录,11条记录中的前十条,和之前的10条是一模一样的,但是多出来一个,幻读可以看成是不可重复读的特殊情况
解决幻读的方法只有一个,就是串行化,彻底放弃并发执行事务,所有的事务的执行都是一个挨着一个的来,这种情况下,并发性是最低的,隔离性是最高的,效率是最低的,数据是最可靠的

四种事务的隔离级别

在这里插入图片描述
大部分情况下,使用第三种默认的隔离级别(RR级别—缩写)就够了!!!

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

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

相关文章

Mac 多版本jdk安装与切换

macOS上可以安装多个版本的jdk,方法如下: 1.下载jdk 在Oracle官网上下载不同版本的jdk: https://www.oracle.com/java/technologies/downloads/#java17 方案一 1.查看本机所有的jdk /usr/libexec/java_home -V3. 配置环境变量 打开bash_…

Excel文件生成与下载(SpringBoot项目)(easypoi)

说明 通过接口&#xff0c;导出表格。 使用SpringBoot框架和easypoi表格解析框架&#xff0c;生成Excel表格&#xff0c;并通过接口下载。 表格示例 依赖 版本 <easypoi.version>4.4.0</easypoi.version>依赖 <!-- easypoi --> <dependency><…

python知识:有效使用property装饰器

一、说明 Python是唯一有习语&#xff08;idioms&#xff09;的语言。这增强了它的可读性&#xff0c;也许还有它的美感。装饰师遵循Python的禅宗&#xff0c;又名“Pythonic”方式。装饰器从 Python 2.2 开始可用。PEP318增强了它们。下面是一个以初学者为中心的教程&#xff…

安科瑞精密配电多回路监控装置在轨道交通项目上的应用

行业背景 轨道交通作为城市公共交通系统的一部分&#xff0c;在过去几十年中得到了广泛的发展和扩张。它在解决城市交通拥堵、减少环境污染、提高城市可持续性等方面发挥了重要作用。随着科技的进步&#xff0c;轨道交通系统也在不断引入新的技术和创新&#xff0c;以提高运行…

WPF Material Design 初次使用

文章目录 前言相关资源快速开始快速开始说明地址 吐槽一下 前言 MD全称MaterialDesignInXamlToolkit&#xff0c;MaterialDesign和Bootstrap一样&#xff0c;都是一个UI风格库。相当于衣服中的休闲服&#xff0c;汉服&#xff0c;牛仔裤一样&#xff0c;就是风格不一样的Ui框架…

VR钢铁实训 | 铁前事业部虚拟仿真培训软件

随着科技的发展&#xff0c;虚拟现实技术在各个行业中的应用越来越广泛。在钢铁冶炼行业中&#xff0c;VR技术也逐渐得到了应用&#xff0c;其中铁前事业部虚拟仿真培训软件就是一项非常有优势的技术。 铁前事业部虚拟仿真培训软件是广州华锐互动打造的《钢铁生产VR虚拟培训系统…

msvcp110.dll是什么意思与msvcp110.dll丢失的解决方法

电脑突然提示msvcp110.dll丢失&#xff0c;无法执行此代码。导致软件无法打开运行&#xff0c;这个怎么办呢&#xff1f;我在网上找了一天的资料&#xff0c;终于把这个问题彻底处理好&#xff0c;也弄清楚了msvcp110.dll丢失的原因及msvcp110.dll丢失修复方法&#xff1f;现在…

docker从零部署jenkins保姆级教程(上)

jenkins&#xff0c;基本是最常用的持续集成工具。在实际的工作中&#xff0c;后端研发一般没有jenkins的操作权限&#xff0c;只有一些查看权限&#xff0c;但是我们的代码是经过这个工具构建出来部署到服务器的&#xff0c;所以我觉着有必要了解一下这个工具的搭建过程以及简…

网络通信深入解析:探索TCP/IP模型

http协议访问web 你知道在我们的网页浏览器的地址当中输入url&#xff0c;未必是如何呈现的吗&#xff1f; web浏览器根据地址栏中指定的url&#xff0c;从web服务器获取文件资源&#xff08;resource&#xff09;等信息&#xff0c;从而显示出web页面。web使用HTTP&#xff08…

vs code调试rust乱码问题解决方案

在terminal中 用chcp 65001 修改一下字符集&#xff0c;就行了。有的博主推荐 修改 区域中的设置&#xff0c;这会引来很大的问题。千万不要修改如下设置&#xff1a;

八个针对高级职位的高级 JavaScript 面试题

JavaScript 是一种功能强大的语言&#xff0c;是网络的主要构建块之一。这种强大的语言也有一些怪癖。例如&#xff0c;您是否知道 0 -0 的计算结果为 true&#xff0c;或者 Number("") 的结果为 0&#xff1f; 问题是&#xff0c;有时这些怪癖会让你摸不着头脑&…

同步推送?苹果计划本月推出 iOS17和iPadOS17,你的手机支持吗?

据报道&#xff0c;苹果公司计划在本月推出 iOS 17 和 iPadOS 17 正式版更新。与去年不同的是&#xff0c;这次更新将同时发布&#xff0c;而不是分别发布。根据彭博社的一位消息人士马克・古尔曼的说法&#xff0c;苹果公司认为 iOS 17 和 iPadOS 17 的第八个测试版已经非常接…

动态库的制作与使用及 动态库加载失败解决

加载动态库时有时会出现error while loading shared libraries&#xff1a;libcalc.so:可以通过lld命令查看动态库的依赖关系&#xff0c;发现libcalc.so时not found 原因 查找的优先级是DT_RPATH->LD_LIBRARY_PATH->/etc/ld.so.cache->/lib/,/usr/lib 找不到一个优…

文心一言api接入如何在你的项目里使用文心一言

文心一言api接入在项目里接入文心一言 一、百度文心一言API二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、百度文心一言API 基于百度文心一言语言大模型的智能文本对话AI机器人…

java读取服务器数据包并下载至本地目录

jsch包如果没有的话&#xff0c;可评论联系我&#xff0c;我私发给你&#xff0c;或者通过https://mvnrepository.com/artifact/com.jcraft/jsch/0.1.55进行下载&#xff0c;添加至工程目录 package com.hbisdt.dqbasic.modular.util;import com.jcraft.jsch.*;import java.i…

【word技巧】如何在word文件中方框打对勾?

Word文件制作了调查问卷或者信息表之类的文件&#xff0c;总是少不了有需要打勾的选项&#xff0c;如果打印成了纸质文件打勾就简单了&#xff0c;但是在word文件中应该如何在方框中打√符号呢&#xff1f;今天分享三个方法。 方法一&#xff1a; 先输入一个大写的R&#xff…

个人信息去标识化具体实施指南

声明 本文是学习个人信息去标识化指南. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 范围 本标准描述了个人信息去标识化的目标和原则&#xff0c;提出了去标识化过程和管理措施。 本标准针对微数据提供具体的个人信息去标识化指导&#xff0c;适…

哈希的应用——布隆过滤器

文章目录 前言1. 布隆过滤器提出2. 布隆过滤器概念3. 布隆过滤器的插入多哈希函数映射减少冲突结构定义及set&#xff08;插入&#xff09;函数实现 4. 布隆过滤器的查找test&#xff08;查找&#xff09;函数实现布隆过滤器允许误判 5. 布隆过滤器的适用场景6. 如何选择布隆过…

JVM 对象的内存布局

对象头 Mark word 标记字段 用于存储对象自身的运行时数据&#xff0c;如哈希码&#xff08;HashCode&#xff09;、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等 ClassPoint 类型指针 对象指向它的类型元数据的指针&#xff0c;Java虚拟机通过这个指针 来…

延时消息队列

目录 前言 一、延时队列实用场景 二、DelayQueue DelayQueue的实现 使用延迟队列 DelayQueue实现延时任务的优缺点 三、RocketMQ 原理 四、Kafka 原理 实现 DelayMessage定义 消息发送代码 消费者代码 参考 前言 延时队列的内部是有序的&#xff0c;最重要的…