【mysql】隔离级别以及其验证实例

news2024/11/18 7:23:38

目录

前言

读未提交(Read Uncommitted)

读已提交(Read Committed)

可重复读(Repeatable Read)

串行化(Serializable)


前言

在事物与隔离级别中我们讲解了事务与不同隔离级别,以及可能产生的问题,本节我们通过简单的例子来验证不同隔离级下可能存在的问题。

首先我们需要一张测试表以及初始数据:

create table test_cases
(
    id         int         not null,
    group_name varchar(40) not null
    unique (id)
);

INSERT INTO health_tree.test_cases (id, group_name) VALUES (1, 'test1');

笔者用的mysql5.7,默认隔离级别是REPEATABLE-READ,可通过“select @@tx_isolation;”查询

可以通过一下命令设置隔离级别

#read uncommitted 
#read committed
#repeatable read
#serializable
set session transaction isolation level read uncommitted ;
读未提交(Read Uncommitted)

1、启动事务a

2、启动事务b,并更新数据但不提交

3、事务a再次取数据,可以看到读取到了,事务b未提交的数据

4、若回滚(rollback)事务b

5、事务a读取值变回

这就是未提交读下的脏读现象

读已提交(Read Committed)

1、启动事务a

2、启动事务b,并更新数据但不提交

3、事务a读取数据,数据未变化

4、事务b提交事务

5、事务a读取数据,读取到事务b提交更新的更新数据

虽然读已提交解决了脏读现象,但可能出现不可重复读的问题。

可重复读(Repeatable Read)

1、启动事务a

2、事务b更新数据并提

3、读取事务a,数据未变解决不可重复读问题

4、再次开启事务b,插入一条新数据并提交

5、在事务a中进行相同数据插入

虽然查询并未查询到id为2这条数据,但是在进行插入的时候还是“感知”到这条数据已经存在,这个感知我们可以当作我们一直觉得的“幻读”。这里重点提一下,经常看到对幻读这样的理解:幻读是事务a 执行两次 select 操作得到不同的数据集,即 select 1 得到 1 条记录,select 2 得到 2 条记录,这难到不是不可重复读的表现吗?

正确的理解应该是:事务中 select 操作得到的结果数据状态无法支撑后续的数据操作。比如上面的插入id为 2 的数据是报“ Duplicate entry”。

串行化(Serializable)

相信看到这里大家对mysql事物操作也有了一个基本的掌握,以及对前面的几种隔离级别也有了更深的了解,在这里笔者想把串行化这一点的例子交给读者自己去完成,相信大家看了前面的内容,这部分的操作也可以做到信手拈来,通过实践自己解决“可重复读”隔离级别下产生的幻读问题吧!

相信能耐心读到这里的读者,对mysql技术都有一定的追求,在这里笔者推荐大家阅读:高性能MySQL

电子书版本,扫码回复:mysql

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

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

相关文章

Word中在公式后面自动加入序号

1、在第一个公式后面输入(英文输入法下)#(),并且把光标放到两个括号之间: 2、点击插入-文档部件-域,类别选编号,域名选AutoNum,格式选1,2,3,…,确…

kafka高吞吐、低延时、高性能的实现原理

作者:源码时代-Raymon老师 Kafka的高吞吐、低延时、高性能的实现原理 Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。Kafka虽然是基于磁盘做的数据存储,但…

docker 资源控制

Docker的资源控制 对容器使用宿主机的资源进行限制,如cpu,内存,磁盘I/O Docker使用linux自带的功能cgroup(control grouos)是linux内核系统提供的一种可以限制,记录,隔离进程组使用的物理资源 Docker借助这个机制&…

python圣诞树代码编程

以下是一个简单的Python圣诞树代码: def draw_tree(height): for i in range(height): print( * (height - i - 1) * * (2 * i 1)) print( * (height - 1) |)draw_tree(10) 这个函数会绘制一个等腰三角形,其中每一行的星号数量从1开…

Java_LinkedList链表详解

目录 前言 ArrayList的缺陷 链表 链表的概念及结构 链表的种类 1.单向或双向 2.带头或不带头 3.循环或不循环 LinkedList的使用 什么是LinkedList LinkedList的使用 LinkedList的构造 LinkedList的其他常用方法介绍 LinkedList的遍历 ArrayList和LinkedList的…

「实用场景教程」如何用日程控件DHTMLX Scheduler制作酒店预订日历?(三)

dhtmlxScheduler是一个类似于Google日历的JavaScript日程安排控件,日历事件通过Ajax动态加载,支持通过拖放功能调整事件日期和时间,事件可以按天,周,月三个种视图显示。 DHTMLX Scheduler正式版下载 在本教程中&…

如何解决el-table中动态添加固定列时出现的行错位

问题描述 在使用el-table组件时,我们有时需要根据用户的操作动态地添加或删除一些固定列,例如操作列或选择列。但是,当我们使用v-if指令来控制固定列的显示或隐藏时,可能会出现表格的行错位的问题,即固定列和非固定列…

Spring全面详解

目录 1. Spring 概述 1.1 Spring是什么 1.2 Spring的作用 1.3 Spring IoC是什么 2. Spring 快速入门 3. Spring Bean 3.1 的实例化方式 空参构造器 3.2 的属性注入 全参构造器注入 setter方法注入 策略模式 3.3 注解管理 3.4 注解方式的属性注入 1. Spring 概述 …

理解VAE(变分自编码器)

1.贝叶斯公式 贝叶斯理论的思路是,在主观判断的基础上,先估计一个值(先验概率),然后根据观察的新信息不断修正(可能性函数)。 P(A):没有数据B的支持下,A发生的概率,也叫做先验概率。…

C++ 关于结构体struct的一些总结

文章目录 一、 结构体(struct)是什么?(1)概念(2)struct 与 calss 的区别 二、定义、声明与初始化(1)三种定义结构体的方法:(2)结构体变量初始化 三、结构体嵌…

老有所依:TSINGSEE青犀养老院智能视频监管方案

养老院智能监控方案是为了提高养老院内老人的安全和护理质量,利用智能技术与监控设备进行全方位的监控和管理,可以加强对老人的监护和护理,提高养老院的服务质量和安全性。 旭帆科技基于视频技术与AI智能分析技术构建的养老院智能视频监控方…

算法:常见的链表算法

文章目录 链表算法两数相加两两交换链表中的节点重排链表合并K个升序链表K个一组翻转链表 总结 本篇总结常见的链表算法题和看他人题解所得到的一些收获 链表算法 关于链表的算法: 画图:画图可以解决绝大部分的数据结构的问题,任何的算法题…

Ubuntu 安装 CUDA 和 cuDNN 详细步骤

我的Linux系统背景: 系统和驱动都已安装。 系统是centos 8。查看自己操作系统的版本信息:cat /etc/issue或者是 cat /etc/lsb-release 用nvidia-smi可以看到显卡驱动和可支持的最高cuda版本,我的是12.2。驱动版本是535.129.03 首先&#…

snakeyaml编辑yaml文件并覆盖注释

文章目录 前言技术积累实战演示1、引入maven依赖2、覆盖注释工具类3、snakeyaml工具类4、测试用例5、测试效果展示 写在最后 前言 最近在做一个动态整合框架的项目,需要根据需求动态组装各个功能模块。其中就涉及到了在application.yaml中加入其他模块的配置&#…

Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版

文章目录 1 基础知识1.1 K8s 有用么?1.2 K8s 是什么?1.3 k8s 部署方式1.4 k8s 环境解析 2 环境部署2.1 基础环境配置2.2 容器环境操作2.3 cri环境操作2.4 harbor仓库操作2.5 k8s集群初始化2.6 k8s环境收尾操作 3 应用部署3.1 应用管理解读3.2 应用部署实…

浏览器提示不安全

当我们使用浏览器访问一个网站时,如果该网站使用的是HTTPS连接,那么浏览器会对其进行安全性的检查。其中一项重要的检查就是确认该网站是否拥有有效的SSL证书。然而,有时我们会在浏览器中看到“不安全”的警告,这通常是由于SSL证书…

【Go自学版】02-goroutine

利用时间片分割进程,致使宏观上A,B,C同时执行(并发) CPU利用率包含了执行和切换,进程/线程的数量越多,切换成本也会增大 最大并行数:GOMAXPROCS work stealing: 偷其他队列的G hand off: 当前G1阻塞&#…

中缀表达式转后缀表达式与后缀表达式计算(详解)

**中缀表达式转后缀表达式的一般步骤如下: 1:创建一个空的栈和一个空的输出列表。 2:从左到右扫描中缀表达式的每个字符。 3:如果当前字符是操作数,则直接将其加入到输出列表中。 4:如果当前字符是运算符&a…

禅道v11.6 基于linux环境下的docker容器搭建的靶场

一、环境搭建 linux环境下的 在docker环境下安装禅道CMS V11.6 docker run --name zentao_v11.6 -p 8084:80 -v /u01/zentao/www:/app/zentaopms -v /u01/zentao/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 -d docker.io/yunwisdom/zentao:v11.6二、常见问题 1.删除…