MySQL基础-----事务(下)

 目录

前言

 一、并发事务问题

1.赃读

2.不可重复读

3.幻读

二、事务隔离级别

1.相关操作

2.案例演示


前言

        本期我们继续上一期事务的内容,本期的主要讲解的是并发事务的相关问题以及解决方式,内容可能会比较难去理解,不过我会尽量详细说明的。下面看正文。

 一、并发事务问题

1.赃读

赃读:一个事务读到另外一个事务还没有提交的数据。

 比如B读取到了A未提交的数据。下面看个案例:

# 左窗口SQL语句内容
# 设置隔离级别
set transaction isolation level read uncommitted ;
begin ;
#第一次查询结果
select * from account;
#右边窗口更新了数据后查看结果
select * from account;
# 右边窗口提交事务后查看结果
select * from account;

# 右窗口内容
begin ;
update account set money=money-1000 where name='张三';

commit;

通过上面这个案例可以看出左边事务可以读取到右边事务的提交后的结果,这就出现了读取混乱的情况,毕竟另一个并发事务还没有提交,这里就读取到了数据的变化,这就是脏读。

2.不可重复读

不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。

事务A两次读取同一条记录,但是读取到的数据却是不一样的。下面看个案例:
# 左窗口SQL语句内容
# 设置事务隔离级别
set transaction isolation level read committed ;
#第一次查询结果
select * from account;
#右边窗口更新了数据后查看结果
select * from account;
# 右边窗口提交事务后查看结果
select * from account;

# 右窗口内容
begin ;
update account set money=money+1000 where name='张三';

commit;

3.幻读

幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了 " 幻影 "

案例如下:

# 左窗口SQL语句内容
# 设置事务隔离级别
set transaction isolation level Repeatable Read ;
#第一次查询结果
select * from account;
# 右边窗口提交事务后插入新的数据
insert into account(id, name, money) values (3,'老六',3000);
# 左边窗口插入失败后再次查询
select * from account;

# 右窗口内容
begin ;
insert into account(id, name, money) values (3,'王五',3000);
commit;

二、事务隔离级别

为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。主要有以下几种:

隔离级别

脏读

不可重复读

幻读

Read uncommitted

Read committed

×

Repeatable Read(默认)

×

×

Serializable

×

×

×

1.相关操作

查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
设置事务隔离级别
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED |
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
注意:事务隔离级别越高,数据越安全,但是性能越低。

2.案例演示

(1)解决脏读问题:

很简单我们只需要把事务隔离级别换成除了Read uncommitted 的其他三个就行了,示例如下:

这里我们可以看出,当右边事务窗口数据更新后就不会读取到右边窗口的数据了,这里就解决了脏读问题。SQL语句如下:

# 左窗口SQL语句内容
# 设置事务隔离级别
set transaction isolation level read committed ;
#第一次查询结果
select * from account;
#右边窗口更新了数据后查看结果
select * from account;
# 右边窗口提交事务后查看结果
select * from account;

# 右窗口内容
begin ;
update account set money=money-1000 where name='张三';

commit;

 (2)解决不可重复读问题

我们只需要把事务隔离级别换成Repeatable Read(默认)就行了,示例如下:

 这里我们可以看出,当右边事务窗口修改了数据并且提交了,但是左边窗口读取到的数据并没有发生任何变化,也就是事务不可重复读取,保证一个事务下读取到的结果不会受其他事务的影响,除非当前事务提交后,再次读取,数据结果才会发生变化。

# 左窗口SQL语句内容
# 设置事务隔离级别
set transaction isolation level Repeatable Read ;
#第一次查询结果
select * from account;
#右边窗口更新了数据后查看结果
select * from account;
# 右边窗口提交事务后查看结果
select * from account;
# 左边窗口提交后数据结果
select * from account;

# 右窗口内容
begin ;
update account set money=money+1000 where name='张三';

commit;

(3)解决幻读问题:

我们只需要把事务隔离级别换成Serializable就行了,示例如下:

 这里我们可以看出,当左边窗口提交事务之前,右边窗口插入数据是没有反应的,只有当左边窗口提交事务之后,右边窗口才会抛出一个错误(如果等待时间过长也会抛出错误),这就是避免出现幻读的情况,保证事务的完整性。SQL语句如下:

# 设置事务隔离级别
set transaction isolation level Serializable ;
#第一次查询结果
select * from account where id=4;
# 右边窗口没有反应后插入新的数据
insert into account(id, name, money) values (4,'老六',3000);
# 再次查询
select * from account where id=4;
# 右边窗口无反应后提交
commit ;

# 右窗口内容
begin ;
insert into account(id, name, money) values (4,'老马',3000);
# 无反应

以上就是本期的全部内容,我们下次见!

分享一张壁纸:

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

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

相关文章

C++ UML类图

参考文章: (1)C UML类图详解 (2)C基础——用C实例理解UML类图 (3)C设计模式——UML类图 (4)[UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之…

31.HarmonyOS App(JAVA)鸿蒙系统app Service服务的用法

鸿蒙系统app Service服务的用法 后台任务调度和管控 HarmonyOS将应用的资源使用生命周期划分为前台、后台和挂起三个阶段。前台运行不受资源调度的约束,后台会根据应用业务的具体任务情况进行资源使用管理,在挂起状态时,会对应用的资源使用进…

《C语言深度剖析》---------关键字(1)

1.双击实质--->加载内存 windows系统里面,双击的本质就是运行程序,把程序加载到内存里面; 任何程序运行的时候都必须加载到内存里面; 程序没有运行之前在硬盘里面,为什么程序运行之前必须加载到内存里面呢&#…

Spring Web MVC入门(5)

响应 在我们前面的代码例子中, 都已经设置了响应数据Http响应结果可以是数据, 也可以是静态页面, 也可以针对响应设置状态码, Header信息等. 返回静态页面 创建前端页面index.html(注意路径) html代码如下: <!DOCTYPE html> <html lang"en"> <hea…

Nutanix 国产化替代|一文了解 SmartX 超融合替代可行性与迁移方案

2022 年 8 月 19 日&#xff0c;Nutanix&#xff08;路坦力&#xff09;宣布中国市场自 2023 财年起将转型为合作伙伴销售主导模式&#xff0c;引起了广泛关注&#xff1b;同时结合当前 IT 基础架构的国产化趋势背景&#xff0c;不少正在使用和考虑使用 Nutanix 产品的企业开始…

Vue 中预加载组件

在 Vue 中&#xff0c;利用 VueRouter 可以轻松的实现两个组件&#xff08;页面&#xff09;之间的切换&#xff0c;有个常用的设计就是需要在登录页登录后跳转至一个内容页&#xff0c;通常的做法是在登录校验完成之后立即切换路由至内容页&#xff0c;接着内容页发送网络请求…

极简生活|2024年让自己越来越好的18个极简好习惯

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 转眼间已经进入了2024年&#xff0c;新的一年&#xff0c;新的开始。 俗话说&#xff1a;百尺高台起于垒土&#xff0c;千里之堤毁于蚁穴。 好习惯积累的越多&#xff0c;坏习惯越来越少&#xff0c;我们的生活才能越…

Iterator对象功能学习

package config;import java.util.Iterator; import java.util.Properties; import java.util.Set;/*** 这个类演示了如何使用Properties类来存储和访问键值对。* Properties类继承自Hashtable&#xff0c;因此它可以用来存储键值对数据&#xff0c;且支持同步。*/ public clas…

MySQL介绍

一、MySQL数据库介绍 1、发展史 1996年 MySQL1.0 2008年1月16日 Sun公司收购了 MySQL 2009年4月20日 Oracle收购了Sun公司 MySQL是一种开放源代码的关系型数据库管理系统 使用最常用的数据库管理语言 SQL&#xff08;结构化查询语言&#xff09; MySQL是开放源代码的 因此所有…

基于Springboot的员工健康管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的员工健康管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

【c++】c++基本语法知识-命名空间-输入输出-缺省参数

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;c_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.命名空间 1.2 命名空间定义 1.3 命名空间使用 命名空间的三种使用方式 2.C输入&输出 std命名空间的使用惯例 3.缺省参数 3…

Win11初始化系统遇一文解决

这个是目录 一、设置内的初始化无法使用时&#xff0c;使用以下工具二、将桌面移动到D盘三、解决win11桌面右键创建只有一个带盾牌的文件夹问题四、win11 系统停止更新五、office安装1、使用的是 Office Tool plus2、使用WPS 六、D盘有感叹号七、打开组策略编辑器(gpedit.msc)失…

【Docker】-- 如何安装docker

一、安装docker 首先要安装一个yum工具 yum install -y yum-utils 安装成功后&#xff0c;执行命令&#xff0c;配置Docker的yum源&#xff1a; yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 最后&#xff0c;执行命令&#x…

Windows 安装 Graalvm 环境(JDK 22)

Windows 安装 Graalvm 环境 系统&#xff1a;Windows 11 官方参考指南&#xff1a;https://www.graalvm.org/jdk22/docs/getting-started/windows/ 安装 Graalvm & 下载 native-image 下载 Graalvm 并安装 下载的 SDK 选择最新版&#xff08;JDK 22&#xff09;&#xff…

UE4_官方动画内容示例1.3_ 运动混合空间(Locomotion BlendSpace)

如何使用运动&#xff08;Locomotion&#xff09;混合空间将Actor在不同方向上及不同速度的运动混合起来。&#xff08;例如&#xff0c;展示了一个混合了以不同速度向后、前、左和右走路/跑步动作的Actor&#xff09;。 一、相关知识点&#xff1a; 混合空间是允许根据多个输…

《汽车数据安全若干问题合规实践指南》正式发布(百度盘下载)

指南针对汽车数据安全的重要合规内容&#xff0c;结合汽车行业特有场景&#xff0c;参考行业最佳实践&#xff0c;提出合规实践建议。指南旨在进一步提高汽车行业数据安全保护水平&#xff0c;增强汽车企业数据安全合规保障能力&#xff0c;推动汽车数据价值安全使用&#xff0…

初始Java篇(JavaSE基础语法)(2)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 逻辑控制 顺序结构 分支结构 if语句 switch 语句 循环结构 while 循环 for 循环 do while 循环 输入输出 输出到控制台 从键盘输入 …

AIGC——ComfyUI工作流搭建、导入与常用工作流下载

工作流 ComfyUI工作流是一个基于图形节点编辑器的工作流程&#xff0c;通过拖拽各种节点到画布上&#xff0c;连接节点之间的关系&#xff0c;构建从加载模型到生成图像的流程。每个节点代表一个与Stable Diffusion相关的模型或功能&#xff0c;节点之间通过连线传递图片信息。…

蓝桥杯-数的潜能-求快速幂

题目 思路 --将数字拆分成加和的形式&#xff0c;并且相乘。数据范围到10的18次方&#xff0c;暴力肯定不行&#xff0c;要找规律。拆分成1肯定不行&#xff0c;对乘法没有贡献&#xff0c;2可以&#xff0c;3也可以&#xff0c;4、5、6等大于3的数字都可以用2和3来表示。所以…