隔离级别的实验|学习笔记

简介: 快速学习隔离级别的实验

开发者学堂课程【高校精品课-厦门大学 -JavaEE 平台技术隔离级别的实验学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/80/detail/15921


隔离级别的实验

 

MySQL8.0的数据库的上做四个实验,看四种事物的隔离级别是怎样处理章读问题,不可重复读的问题,还有换读的问题。

image.png

MySQL 的数据库用的时候8.0,所以首先来看一下数据库的全局的事务隔离性。可以看到它的事务隔离性是 REPEATABLE- READ,当前会话的事务隔离性也是REPEATABLE- READ,这是两个不同的概念。

isolation的这个属性所设事物的隔离的级别是会话的隔离级别,也是看到的第二

个这个字。所以后面的所有实验都是在会话的事务隔离级别上的来做。

现在看到的是它的会话事务隔离级别跟全局的事务隔离级别是一致的。所以首先把它的会话的事务隔离级别设成了 read uncommitted。看看两个窗口,把这两个窗口的会话的事务隔离级别都设成了这个 read committed,预计在一个会话中间,

在一个数中间对数据库的修改。

其实就算本来还没有提交这个数,在另外一个会话中间也能够看见。所以设好了以后,分别看一下这两个会话的事务隔离级别,当前的会话事务隔离级别都变成了这个 read uncommitted。可以看到这个,这边看一下其实它也变成了read uncommitted。使用 oomn demo之间 oomn11- product这个数据表,首先分别开启事务,两个会话窗口都开启事务。

所以先看一下这个 oomn11-product这个表,这是产品的规格信息,其中有一个是规格的库存信息,就是 stock,打算来修改库存的量,stock 的值。在另外一个过程也看一下,这两个中间看到的 product信息都是一致的,所以要在一个部分中间update 语句去修改 product中间的stock值,它的库存量,把这个库存量设成99,只是把 ID等于一的这个规格的库存量增加一个需求。设完了以后,虽然还没有提交事务,但是在这个会话里面就能看到它变成99了。由于现在的事务的隔离级别是

read uncommitted,所以在另外一个会话中间去看一下它的值。

它能够看到在第一个会话中间还没有提交的这个事务。这时它改成了99,现在第一个方案中间把这个事务回滚回去,所以再去看的话,它变成了100。实际上它的这个事务的最后的值stock还是100,当然在这边也能看到它改成100了。所以这就是read uncommitted 的起点,它能够读到另外一个会话中间在事务中间还没有提交的之前的这个中间过程。

再来看第二个,把它的事务隔离级别设成了 read uncommitted,这样让它能够读到事务提交以后的字。所以先用 session 命令把它设成 read uncommitted的值。然后来看一下它的会话的 session.transaction-isolation的值是多少。可以看到它已经变成了 read uncommitted。

但在这边的第二句话中间,同样把它的这个事物的隔离级别,会话的事务隔离级别也改成了 read uncommitted,所以看一下它的会话的事务隔离级别也感受到 read uncommitted,然后同样两个会话中间分别开启事务。同样准备去修改oomn11- product表里的库存信息,所以先看一下修改之前的库存信息是多少。还是100,同样用 update语句把它的库存信息,库存量修改成为99。把ID等于一的这个规格的库存信息修改为99。在提交之前,先在第二个部分中间看一下 product库存量是多少。这个时候显示的应该是跟第一个会话中间是相同的值100。

image.png

所以这边执行一条 update语句在第一个会话中间,这时候没有提交事务,但是第一个会话中间看到它被设成99了,第二个中间可以看到它还是100。然后在第一个会话中间,把这个事务提交,在第二个会话中间就能看到提交以后的数据99,这就是 read uncommitted的隔离级别。那这个隔离级别上中间的数据是看不到的,只能看到会话事务提交以后的数据。那第三个实验,把会话的隔离级别提升到repeatable read 这个级别。其实先不用设,因为是 MySQL 8.0的默认的这个级别就是 repeatable read,所以就不需要再去做那样的一个设定语句。所以看一下三个会话的隔离级别都是 repeatable read。

image.png

三个会话中间分别开始一个事务。然后在第一个会话中间,怎么去修改库存量?但是在修改它的库存量之前,先在第二个会话中间去查一下这个库存量多少。然后在第一个会话中间修改库存量,提交以后,再到第二个会话中间去看一下是什么,然后再到第三个中间去看一下的是什么。

所以先看一下这个库存量,现在可以看到这个第一个ID为一的规格的库存量是100,这第一个会话中间和第二个会话中间,先看一下,那第三个不看啊,等到它事务提交以后再来看。所以两个会话中可以看到它的库存量都是100。先在第一个事务中间修改它的库存量到99。把 ID为一的这个规格的销量修改成为99,然后把事务提交。那在这里看一下啊,因为它提交以后可以看到它的库存量已经改99。在第二个事务中间,可以看到它看到的这个库存量依然是100,所以说明它在第一个事务在更新之前看过一次是100,它在第一个事物提交完了以后,再看的话,它还

是100。

就是说它的这个事务开始了,它看过的这个数据它永远都会是一样的,所以这样做。但是第三个事务,因为它之前没看过,所以在第一个事务已经提交的时候,再

去看的话,会发现它的这个库存量就是99,跟第一个的会话是一样的。

image.png

那最后一个实验来尝试一下 try 型的事务隔离级别,主要解决换读问题。不再去修改数值,而是往里面加入新的产品规格。所以修改了完了以后,在两个会话中间分别看一下它当前会话的事务隔离级别都改成了 try型。在第一个会话中间开启一个

事务,在第二个会话中间也开启一个事务。

在第一个会话中间插入一条新的产品规格,先分别看一下两个会话中间产品规格的信息。这是三条产品规格信息,怎样在第一个会话中间插入一天新的产品规格信息?在插入的时候会发现这条语句会停在这,原因是第二个会话已经开始了一个事务,而且在查看这张表的信息所以会使第一个会话的操作被停下来,等待第二个会

话中间事务结束。

所以第二个会话事务结束就可以看到第一个会话的数据被插进去。


目录
打赏
0
0
0
0
55
分享
相关文章
CLaMP 3:音乐搜索AI革命!多模态AI能听懂乐谱/MIDI/音频,用27国语言搜索全球音乐
CLaMP 3是由清华大学团队开发的多模态、多语言音乐信息检索框架,支持27种语言,能够进行跨模态音乐检索、零样本分类和音乐推荐等任务。
209 1
CLaMP 3:音乐搜索AI革命!多模态AI能听懂乐谱/MIDI/音频,用27国语言搜索全球音乐
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
2972 0
"深度解析:MySQL密码修改与远程登录配置全攻略,保障数据库安全与灵活访问"
【8月更文挑战第9天】MySQL是广受青睐的开源关系型数据库系统,其安全性和易用性对DBA和开发者至关重要。本文通过实例解析MySQL中用户密码更新及远程登录配置,确保数据库安全访问与高效管理。首先介绍如何分步修改密码,包括登录MySQL、选择数据库、使用`ALTER USER`命令更新密码,并刷新权限。接着,指导如何配置远程访问,涉及调整MySQL监听地址、授权用户远程登录、检查网络设置及测试远程连接。遵循这些步骤,可强化数据库安全性并实现灵活管理。
671 0
Spring Boot中使用EasyPoi入门
主要介绍如何使用EasyPoi的注解来完成简单的Excel导入、导出操作
Spring Boot中使用EasyPoi入门
开发指南—Sequence—隐式用法—CREATE TABLE
在为拆分表或广播表的主键定义AUTO_INCREMENT后,Sequence可以用于自动填充主键,由PolarDB-X自动维护。 扩展标准建表语法,增加了自增列的Sequence类型,如果未指定类型关键字,则默认类型为GROUP。PolarDB-X自动创建的、跟表相关联的Sequence名称,都是以AUTO_SEQ_为前缀,后面加上表名。
100 0
ECS使用有感
我是一名即将步入社会的大学生,随着网络法等相关专业知识的学习愈发强烈。查询资料时,常常会浏览到制作精美的个人站,因此产生了建设自己个人站的设想,但是由于业余时间少之甚少,同时听闻购买域名与服务器的价格不菲,因此计划一直未能实现
数据结构和算法之数组(难度级别:初级)
数据结构和算法之数组(难度级别:初级)
179 0
数据结构和算法之数组(难度级别:初级)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问