【MySQL】事务(中)

news2025/1/11 14:10:27

文章目录

  • 事务异常与产出结论
    • 手动提交 和自动提交 对 回滚的区别
  • 事务隔离性理论
    • 如何理解隔离性?
    • MySQL的隔离级别
    • 事务隔离级别的查看
    • 设置隔离级别

事务异常与产出结论

在没有启动事务之前,account表中存在孙权和刘备的数据


在启动事务后, 向 account表中 插入 曹操数据
输入 CTRL \ 终端1中的客户端 崩溃掉
此时在终端2中 查看 表中数据,发现启动事务后插入的曹操数据没有了

说明客户端崩溃,MySQL会自动回滚


手动提交 和自动提交 对 回滚的区别

输入 set autocommit=0 将提交方式改变
再输入 show variables like ‘autocommit’ 查询当前提交方式
OFF 表示 将 自动提交关闭


启动事务之前,account表中 有两个数据
启动事务之后,删除表中曹操的数据
在客户端崩溃后,再次查询 发现 数据会 进行了回滚,将曹操的数据恢复回来了


输入 show variables like ‘autocommit’ 查询提交方式
ON 表示 将 自动提交打开


在启动事务之前,account表中 存在 孙权 刘备 赵六 三个数据
在启动事务之后,删除 对应的赵六的数据
若此时客户端崩溃,则 刘备数据直接丢失了


所以 autocommit 的 提交方式 是会 影响 单个sql的(由于单个sql 也可看作事务,所以就会可以看作影响事务)

事务隔离性理论

如何理解隔离性?

所有事务都要有执行过程 ,那么在 多个事务 各自执行多个SQL的时候,就有有可能出现相互影响的情况
比如:你妈妈跟你说 ,那么就别学,要学就学到最好,至于你的学习过程,你妈妈是不关心
你的学习,对于你妈来说就是原子
因为在学习过程中,是很容易受到干扰的,所以就需要将你的学习环境隔离开,保证你的学习环境是良好的


中国是有很多 为中国崛起 奋斗的先烈们,但是这些先烈 是看不到 现在 世界的样子的
在 很久之前 就已经 因为 某种 原因 过世了
说明 任何一个人 不一定 要看到 最新的世界,也不一定 要 看到比较老的世界,只要看到在自己生命周期之内的事情即可
(如:我们无法去未来 世界 感觉, 也无法 回到 清朝 去感觉,只需关心当下世界发生的变化即可)


出生的时间点不同,死亡的时间点不同,每个人看到的样貌就不一样

同理 让每一个事务 让其在到来时,看到它所应该看到的数据, 这个过程 称为 隔离性


再比如: 假设查找比较久,而转账很快, 你的朋友先转账,然后你才去查找
先转帐,说明转账来到比较早,原子级别上转账 执行就应该在查找前面
转账 和 查找 两者 事务 同时 进行 ,此时即便 转账做完了 ,你(查找)也不应该看到


MySQL的隔离级别

在此主要是简单点介绍下,后面会详细说


读未提交
当一个事务 在运行 ,另一个 事务 也在运行,这两个事务 在执行过程之中 就可以看作是 并发在运行

输入 select @@tx_isolation 查询隔离级别
发现是 隔离级别为 读未提交


刚开始account表中有两个数据,当终端1启动事务后 进行删除数据
终端1并没有提交数据,而终端2就可以在表中查到 数据没有了
当终端1客户端崩溃了,终端2就能把删除的数据进行回滚
说明一个事务对数据进行修改,另一个事务立马能看到


读提交

刚开始account表中有三个数据,当终端1启动事务后 进行将id值为3的数据name修改为 zhangsan
终端1并没有提交数据时,终端2查询表中数据没有变化
当终端1客户端进行提交了,在终端2中 再次查询就可以看到 修改后的数据

只能当 一个事务 进行 commit 之后, 另一个事务 才能看到修改后的数据


可重复读

是MySQL默认的隔离级别
事务1 将表的数据删除 或 提交,事务2 都是看不到的表的变化 ,直到事务2也提交,才可以看到表的变化

如:有两个小孩 进行潜水,要想知道对方是否上岸,就需要浮到水面上


串行化
事务最高的隔离级别

必须按照到来的事件顺序,一个一个的执行,执行完了一个才进行下一个
就可以保证数据的绝对安全

事务隔离级别的查看

查看隔离级别共有三种方法


第一种方法:select @@global.tx_isolation;
查看全局隔离级别
(进行更改,会影响后续所有客户端的登录)


第二种方法:select @@session.tx_isolation;
查看 会话 全局隔离级别
(进行更改,只会影响会话)


第三种方法: select @@tx_isolation;

第三种方法是第二种方法的简写,两者的作用相同


设置隔离级别

SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ
COMMITTED | REPEATABLE READ | SERIALIZABLE}

session和global 两者选一个,不要省略
transaction 称为 事务
isolation 称为 隔离
level 称为 级别
read uncommitted 称为 读未提交
read committed 称为 读提交
repeatable read 称为 可重复读
serializable 称为 串行化


在终端1中,将会话的隔离级别 设置为 读 提交


输入 select @@global.tx_isolation; 查询全局的隔离级别
发现全局的隔离级别没有变化


输入 select @@session.tx_isolation; 查询会话的隔离级别
发现会话的隔离级别 变为 读提交


在终端2中 查询全局隔离级别和 会话隔离级别
发现全局隔离级别和会话隔离级别 都是 读未提交 都没有受影响
说明会话隔离级别 只能影响 当前会话
(在终端1中修改会话,则会话受到影响,而终端2中的会话不受影响)


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

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

相关文章

通过 Kaptcha 插件生成字符验证码

Kaptcha 是 Google 的⼀个⾼度可配置的实⽤验证码⽣成⼯具,我们选择的是⼀个适配SpringBoot的 开源项⽬ 生成的验证码效果如下: 原理 验证码可以客户端生成,也可以服务器生成. 对于普通的字符验证码, 后端通常分两部分: ⼀:⽣成验…

C语言求数组中出现次数最多的元素

一、前言 遇到一个需求,需要求数组中出现次数最多的元素,查找了一些资料,结合自己的思路,编写了程序并验证。 只考虑元素为非负整数的数组,如果有出现次数相同的元素,则返回较小元素。 二、编程思路 以数…

原生JS实现视频截图

视频截图效果预览 利用Canvas进行截图 要用原生js实现视频截图,可以利用canvas的绘图功能 ctx.drawImage,只需要获取到视频标签,就可以通过drawImage把视频当前帧图像绘制在canvas画布上。 const video document.querySelector(video) con…

若依系统富文本框上传图片报错!

报错如下: 原因:如图,富文本路径中存在 / 字符,导致上传出错。 解决方案:将富文本框内容在前端进行加密,后端再解密。 前端: 安装 crypto-js 插件 npm install crypto-js 创建工具类 :在 sr…

postswigger 靶场(CSRF)攻略-- 1.没有防御措施的 CSRF 漏洞

靶场地址: What is CSRF (Cross-site request forgery)? Tutorial & Examples | Web Security Academy (portswigger.net)https://portswigger.net/web-security/csrf 没有防御措施的 CSRF 漏洞 题目中已告知易受攻击的是电子邮件的更改功能,而目…

【正点原子STM32连载】 第五十二章 图片显示实验摘自【正点原子】APM32F407最小系统板使用指南

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html## 第五…

c语言从入门到实战——初识指针

初识指针 前言1. 内存和地址1.1 内存1.2 究竟该如何理解编址 2. 指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引用操作符(*)2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引用操作符 2.3 指针变量的大小 3. 指针变量类…

Sprint Boot 学习路线 6

测试 Spring提供了一组测试工具,可以轻松地测试Spring应用程序的各个组件,包括控制器、服务、存储库和其他组件。它具有丰富的测试注释、实用程序类和其他功能,以帮助进行单元测试、集成测试等。 JPA测试 Spring JPA(Java Pers…

开放领域对话系统架构

开放领域对话系统是指针对非特定领域或行业的对话系统,它可以与用户进行自由的对话,不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力,以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…

从单服务设计看SLA保证

文章首发公众号:海天二路搬砖工 0. 引言 在微服务架构中,谈到SLA保证,我们更多是从宏观的角度来需求解决方案。比如,通过合理服务拆分来增加系统整体的可维护性;通过多实例部署来保证系统的灾备。但是单个服务是可靠…

2023NewStarCTF

目录 一、阳光开朗大男孩 二、大怨种 三、2-分析 四、键盘侠 五、滴滴滴 六、Include? 七、medium_sql 八、POP Gadget 九、OtenkiGirl 一、阳光开朗大男孩 1.题目给出了secret.txt和flag.txt两个文件,secret.txt内容如下: 法治自由公正爱国…

【JVM】类加载器 Bootstrap、Extension、Application、User Define 以及 双亲委派

以下环境为 jdk1.8 两大类 分类成员语言继承关系引导类加载器bootstrap 引导类加载器C/C无自定义类加载器extension 拓展类加载器、application 系统/应用类加载器、user define 用户自定义类加载器Java继承于 java.lang.ClassLoader 四小类 Bootstrap 引导类加载器 负责加…

故障演练 | 微服务架构下如何做好故障演练

前言 微服务架构场景中,应用系统复杂切分散。长期运行时,局部出现故障时不可避免的。如果发生故障时不能进行有效反应,系统的可用性将极大地降低。 什么是故障演练 故障演练是指模拟生产环境中可能出现的故障,测试系统或应用在…

软考网络工程师知识点总结(二)

目录 21、海明码--差错控制 22、CRC循环冗余校验码 23、网络时延的计算 24、根据距离选择传输介质 25、多模光纤和单模光纤的区别 26、CSMA/CD协议 27、以太网帧结构 28、以太网类型及传输介质的选择 29、交换式以太网(交换机) 30、VLAN虚拟局…

Rust编程中的线程间通信

1.消息传递 为了实现消息传递并发,Rust 标准库提供了一个 信道(channel)实现。信道是一个通用编程概念,表示数据从一个线程发送到另一个线程。 可以将编程中的信道想象为一个水流的渠道,比如河流或小溪。如果你将诸如…

【C++ 学习 ㊱】- 智能指针详解

目录 一、为什么需要智能指针? 二、智能指针的原理及使用 三、auto_ptr 3.1 - 基本使用 3.2 - 模拟实现 四、unique_ptr 4.1 - 基本使用 4.2 - 模拟实现 五、shared_ptr 5.1 - 基本使用 5.2 - 模拟实现 六、weak_ptr 6.1 - shared_ptr 的循环引用问题 …

【Python小程序】求解2 * 2矩阵的逆矩阵

一、内容简介 使用Python求解2 * 2矩阵的逆矩阵。 二、求解方法 我们使用邻接矩阵法来求解2 * 2矩阵的逆矩阵。 det(A): 矩阵A的行列式 adj(A): 矩阵A的邻接矩阵 对于2*2矩阵A 我们有 三、Python代码 基于上述求解方法,我们可以写出Python代码如下&#xff…

行情分析——加密货币市场大盘走势(11.13)

大饼上涨太快,又开始震荡,但上不去,所以目前来看差不多要做回踩动作,入场空单性价比较高。而且从MACD日线来看,也是进入空头趋势,RSI(14)也是进入了超买区间,值得入手空单…

乡镇村污水处理智慧水务智能监管平台,助力污水监管智慧化、高效化

一、背景与需求 随着城市化进程的加速,排放的污水量也日益增加,导致水污染严重。深入打好污染防治攻坚战的重要抓手,对于改善城镇人居环境,推进城市治理体系和治理能力现代化,加快生态文明建设,推动高质量…

拼多多商品详情API接口接入流程如下:

拼多多商品详情API接口可以用于获取拼多多商品的具体信息,包括商品ID、商品名称、价格、销量、评价等。以下是使用拼多多商品详情API接口的步骤: 进入拼多多开放平台,注册并登录账号。在开放平台页面中,找到“商品详情”或“商品…