MYSQL 事物隔离级别的区别与现象

        事物的ACID属性本章不再赘述,本章主要描述事物的隔离级别及隔离级别导致的现象,日常工作中该如何选择MYSQL的隔离级别。

        MYSQL事物的隔离级别及各隔离级别存在的问题如下:

隔离级别/问题脏读不可重复读幻读
读未提交(Read-Uncommitted)
读已提交(Read-Committed)
可重复读(Repeatable-Read)

序列化(Serializable)

        查看数据库隔离级别SQL,默认即为:可重复读        

        下面以实际案例列举各隔离级别出现的问题,创建如下表并插入数据:

CREATE TABLE `account` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `balance` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


INSERT INTO `test`.`account` (`name`, `balance`) VALUES ('lilei', '1000');
INSERT INTO `test`.`account` (`name`, `balance`) VALUES ('hanmei', '1000');
INSERT INTO `test`.`account` (`name`, `balance`) VALUES ('lucy', '1000');

1,读未提交(Read-Uncommitted)

       1.1,navicate打开两个查询连接,且把两个连接的事物隔离级别设置为读未提交,模拟两个事物,如图:

        1.2,事物一开启事物并更新数据 id = 1的数据,但不提交:

        此时id = 1 的数据未改变:

        1.3,事物二开启事物并查询 id = 1的数据:

        1.4,结论

1,事物一更新数据的事物未提交,但事物二已经读取了新数据,如果事物一的更新回滚,则事物二出现【脏读】;

2,事物一未提交事物,插入一条新数据。事物一的插入数据事物未提交,但事物二已可读取到新插入的数据,如果事物一的插入事物回滚,则事物二出现【幻读】。

3,事物一提交或不提交事物,再次更新id=1的数据,将1500该为2000。事物二同一事物中再次查询,结果为2000,此时事物二出现【不可重复读】;

2,读已提交(Read-Committed)

        2.1,navicate打开两个查询连接,且把两个连接的事物隔离级别设置为读已提交,模拟两个事物,如图:

        2.2,事物二开启事物并查询 id = 2 的数据,查询后不提交查询事物,如下图:

        2.3,事物一开启事物,更新 id = 2的数据,不提交事物,如下图:

        未提交事物,所以此时id=2的数据并未改变:

        2.4,事物二在同一事物中查询id=2的数据,

        查询结果同第一次查询一样,即【读已提交】已解决 【读未提交】的问题。

        2.5,事物一提交,id=2的数据变化,如图:

        2.6,事物二在同一事物中查询,如图:

        2.7,结论

1,事物一增/删/改数据的事物未提交,不论事物一操作多少次,事物二都不会查询到新数据,事物二只会查询到事物一提交事物后的数据。即事物二不会出现【脏读】;

2,事物二在同一查询事物中,事物一对同一数据进行多次更新并提交事物,事物二查询结果可能不一样,即事物二出现【不可重复读】;

3,假如事物二查询表的数据量count(*)=5,事物一新增一行并提交事物,事物二再次查询count(*)=6,事物一开启新事物:删除一条数据并提交事物,事物二再次查询count(*)=5.即事物二在同一查询事物中出现【幻读】。

3,可重复读(Repeatable-Read)

        3.1,navicate打开两个查询连接,且把两个连接的事物隔离级别设置为读已提交,模拟两个事物,如图:

        3.2,事物二开启事物并查询 id = 3 的数据,查询后不提交查询事物,如下图:

        3.3,事物一开启事物,更新 id = 3的数据,set balance = 4000,不提交事物。事物二同一事物中查询id=3,查询结果balance=1000,表明【可重复读】和【读已提交】一样,解决了【读未提交】的脏读问题。

        事物一提交事物,id=3的数据变化,如图:

        3.4,事物二在同一事物中查询id=3的数据,

        查询结果仍然是1000,即同一事物中,查询同一条数据结果一致。且在事物二的同一事物中,不论事物一对id=4的数据做多少次更改,事物二的查询结果都一致,解决了【读已提交】的问题。

        3.5,结论

1,事物一增/删/改数据的事物未提交,不论事物一操作多少次,事物二都不会查询到新数据,事物二只会查询到事物一提交事物后的数据。即事物二不会出现【脏读】;

2,事物二在同一查询事物中,事物一对同一数据进行多次更新并提交事物,事物二查询结果可能一样,即事物二不会出现【不可重复读】;

3,假如事物二查询表的数据量:select count(*) from account;  count(*)=5,事物一新增一行并提交事物,事物二再次查询数据量: select count(*) from account for update;  count(*)=6两次的查询语句不通,第二次加了读锁,即当前读,事物二在同一查询事物中出现【幻读】。

4,序列化(Serializable)

        序列化的操作采取获取锁的方式,不论查询,还是增/删/改,都将获取操作行的锁,其他操作需等待事物提交后获取锁才能进行操作。虽隔离级别最高,但性能太低,日常开发中基本不会用到。

        

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

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

相关文章

PostgreSQL学习笔记四:GUI管理工具

PostgreSQL 是一款广泛使用的开源关系数据库管理系统,拥有许多图形用户界面(GUI)工具来帮助用户更高效地管理数据库。以下是一些流行的 PostgreSQL 管理工具: pgAdmin: 一个流行的开源 PostgreSQL GUI 工具&#xff0c…

半周期检查-下降沿发上升沿采

1. 半周期路径Half Cycle Path 如果在设计中,同时存在上升沿触发的D触发器,以及下降沿触发的D触发器,则视为半周期路径,Half Cycle Path。 2. Setup time检查 时序图 时序报告: 起始点 startpoint:UFF5&a…

Jenkins+kubernetes流水线构建java项目

在传统的业务环境中,我们的应用部署或者更新都是采用手工的方式,但是在企业内部,应用架构一般都采用微服务,大部分项目都会对应几十个、上百甚至上千个微服务,并且还不仅仅只有一个项目,所以采用收工方式上…

微信小程序开发-配置文件详解

文章目录 一,小程序创建的配置文件介绍二,配置文件-全局配置-pages 配置作用:注意事项:示例: 三,配置文件-全局配置-window 配置示例: 四,配置文件-全局配置-tabbar 配置核心作用&am…

【Linux】————进程控制

作者主页: 作者主页 本篇博客专栏:Linux专栏 创作时间 :2024年10月10日 ​ ​ 一、程序地址空间: 1、C/C中的程序地址空间: ​ 在c中我们了解了这样的空间分布图。 我们应如何去创建和访问变量呢?…

VR线上展厅:超越时空的沉浸式展览,打造个性化、高效展览新模式

一、沉浸式漫游:打破时空限制,尽享虚拟之旅 VR线上展厅通过高度逼真的3D场景构建,为参观者营造了一个仿佛置身其中的虚拟世界。借助各种显示设备,用户能够自由穿梭于各个展区之间,无论是漫步在历史悠久的博物馆&#…

双语大脑的神经可塑性能力:来自健康和病理个体的见解

摘要 双语经验的神经印记对于理解大脑如何处理优势语言和非优势语言至关重要,但关于它的研究仍然没有定论。不同的研究表明神经处理存在相似性或差异性,这对患有脑肿瘤的双语患者具有重要意义。保留术后的双语功能需要考虑到术前的神经可塑性变化。在这…

【论文阅读笔记】End-to-End Object Detection with Transformers

代码地址:https://github.com/facebookresearch/detr 论文小结 本文是Transformer结构应用于目标检测(OD)任务的开山之作。方法名DETE,取自Detection Transformer。   作为2020年的论文,其表现精度在当时也不算高的…

pytorch导入数据集

1、概念: Dataset:一种数据结构,存储数据及其标签 Dataloader:一种工具,可以将Dataset里的数据分批、打乱、批量加载并进行迭代等 (方便模型训练和验证) Dataset就像一个大书架,存…

mongodb GUI工具(NoSQLBooster)

介绍 跨平台的MongoDB GUI工具,支持Windows、macOS和Linux。自带服务器监控工具、Visual Explain Plan、查询构建器、SQL查询等功能。提供免费版本,但功能相比付费版本有所限制。 免费版可供个人/商业使用,但功能有限。 安装成功后&#x…

大疆M2006+C610 pid参数调优

官方给的示例代码里给的是1.5, 0.1, 0 但试了下空转时显然不太行. 自己摸索出0.8, 0.03, 0 表现如图中的蓝色线 期望速度先两秒的1000,然后一秒的2000,一秒的3000, 0 2000 表现还不错,可以看到0.5秒后与期望值的差距控制在大概10%之内,但还是感觉有些过调 对了先说一下基础知识…

有什么方法可以保护ppt文件不被随意修改呢?

在工作或学习中,我们常常需要制作powerpoint演示文稿,担心自己不小心改动了或者不想他人随意更改,我们可以如何保护PPT呢?下面小编就来分享两个常用的方法。 方法一:为PPT设置打开密码 为PPT设置打开密码是最直接有效…

活动预告|博睿数据将受邀出席GOPS全球运维大会上海站!

第二十四届 GOPS 全球运维大会暨研运数智化技术峰会上海站将于2024年10月18日-19日在上海中庚聚龙酒店召开。大会将为期2天,侧重大模型、DevOps、SRE、AIOps、BizDevOps、云原生及安全等热门技术领域。特设了如大模型 运维/研发测试、银行/证券数字化转型、平台工程…

九寨沟,智慧旅游新名片

九寨沟属于自然类景区,以优美的自然风光取胜,景区文化内涵相对缺失。智慧化和文旅融合是智慧文旅景区的两个必备条件,九寨沟在智慧文旅景区建设过程中,经历了两个阶段,先是从传统景区迈向智慧景区,然后是充…

设计模式:单例

一.什么是单例模式 单例模式是一种设计模式,指在整个程序生命周期中有且仅有一个实例的类。可以分为懒汉式以及饿汉式。 懒汉式:只有在类的实例被使用时才生成唯一实例。但是存在线程安全以及内存泄露的问题。可以节省系统资源。 饿汉式:程序…

10万+收藏!10万转发!AI绘画如何助力育儿赛道引爆短视频平台?

在自媒体领域,内容创作的竞争日益激烈,但育儿自媒体一直是一块热门且持久的“金矿”,吸引了无数创作者投身其中。然而,如何在这片红海中脱颖而出,成为了许多创作者面临的难题。而AI绘画的出现,无疑解决了创…

这种好看的航线图怎么绘制?超简单~~

今天这篇推文小编给大家介绍一个我一直想绘制的可视化作品-航线地图,网上有很多类似的教程,但在小编看来,都或多或少有些不完美,小编这次就对其进行完善和美化,主要内容如下: 航线地图所需数据处理 航线地…

Linux实践|设置静态 IP 地址

引言 如果您是 Linux 系统管理员,那么您将需要在系统上配置网络。与可以使用动态 IP 地址的台式机不同,在服务器基础设施上,您需要设置静态 IP 地址(至少在大多数情况下)。 本文[1]旨在向您展示如何在最常用的 Linux 发…

The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)

在知乎内查看 题目 思路来源 题解 首先特判n1的情况,其实也不用问 分治,假设当前解决到[l,r],要递归的vector是x, 维护两个vector L、R,代表下一步要在[l,mid]和[mid1,r]分治的vector 每次将x random_shuffle后&a…

UE4 材质学习笔记01(什么是着色器/PBR基础)

1.什么是shader 着色器是控制屏幕上每个像素颜色的代码,这些代码通常在图形处理器上运行。 现如今游戏引擎使用先进的基于物理的渲染和照明。而且照明模型模型大多数是被锁定的。 因此我们创建着色器可以控制颜色,法线,粗糙度,…