首页
学习
活动
专区
圈层
工具
发布
32 篇文章
1
《sql必知必会》——读书笔记(1)
2
《sql必知必会》——读书笔记(2)
3
《sql必知必会》——读书笔记(3)
4
《sql必知必会》——读书笔记(4)
5
《sql必知必会》——读书笔记(5)
6
MyBatis学习总结(一)——ORM概要与MyBatis快速入门
7
MyBatis学习总结(一)——ORM概要与MyBatis快速起步
8
MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射
9
MyBatis学习总结(三)——多表关联查询与动态SQL
10
MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射
11
MyBatis学习总结(四)——MyBatis缓存与代码生成
12
重学 Java 设计模式:实战工厂方法模式
13
重学 Java 设计模式:实战抽象工厂模式「替换Redis双集群升级,代理类抽象场景」
14
重学 Java 设计模式:实战建造者模式「各项装修物料组合套餐选配场景」
15
重学 Java 设计模式:实战原型模式「上机考试多套试,每人题目和答案乱序排列场景」
16
重学 Java 设计模式:实战单例模式「7种单例模式案例例模式」
17
重学 Java 设计模式:实战桥接模式「多支付渠道(微信)与多支付模式(刷脸、指纹)场景」
18
重学 Java 设计模式:实战代理模式「模拟mybatis-spring中定义DAO接口,使用代理类方式操作数据库原理实现场景」
19
重学 Java 设计模式:实战责任链模式「模拟618电商大促期间,项目上线流程多级负责人审批场景」
20
重学 Java 设计模式:实战命令模式「模拟高档餐厅八大菜系,小二点单厨师烹饪场景」
21
重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」
22
重学 Java 设计模式:实战中介者模式「按照Mybaits原理手写ORM框架,给JDBC方式操作数据库增加中介者场景」
23
重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」
24
重学 Java 设计模式:实战状态模式「模拟系统营销活动,状态流程审核发布上线场景」
25
重学 Java 设计模式:实战模版模式「模拟爬虫各类电商商品,生成营销推广海报场景」
26
重学 Java 设计模式:实战访问者模式「模拟家长与校长,对学生和老师的不同视角信息的访问场景」
27
《重学 Java 设计模式》PDF 出炉了 - 小傅哥,肝了50天写出18万字271页的实战编程资料
28
重学 Java 设计模式:实战适配器模式
29
重学 Java 设计模式:实战桥接模式
30
重学 Java 设计模式:实战组合模式
31
重学 Java 设计模式:实战外观模式
32
重学 Java 设计模式:实战享元模式「基于Redis秒杀,提供活动与库存信息查询场景」

《sql必知必会》——读书笔记(4)

模拟mysql 几种隔离级别

sql几种隔离级别的定义

准备数据库和数据表

模拟的时候我们需要开两个 MySQL 客户端,分别是客户端1 和客户端 2

在客户端 1 中,我们先来查看下当前会话的隔离级别,使用命令…

代码语言:javascript
复制
mysql> SHOW VARIABLES LIKE 'transaction_isolation'

mysql默认可重复读

改为read uncommited

代码语言:javascript
复制
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

因为mysql 默认是自动提交事务的,

所以需要设置autocommit=0

代码语言:javascript
复制
mysql> SET autocommit = 0;

模拟脏读

新开一个mysql客户端2,开启一个事务,插入一个“吕布”

客户端2的设置仍然是默认的:

在客户端1中查询当前表:

发下客户端1读了客户端2还没有提交的事务数据,而客户端2也有可能立马回滚。

客户端1再次读表

模拟“不可重复读”

用客户端1查询id=1的数据

客户端2对id=1的进行修改

这时候,客户端1再读:

对于客户端1来说,发生了不可重复读。

模拟幻读

先用客户端1查询所有用户:

然后客户端2插入“吕布”

这时候再用客户端1查询,

发现多了一条数据,发生了幻读。

现在将客户度1的隔离级别设置为默认的不可重复读。

我们只用验证下幻读。

客户端1开启一个事务,进行查询所有英雄:

客户端2增加一个英雄赵云

此时还没有提交。 客户端1 再读(红框部分为第2次读):

说明,此时是不会发生 不可重复读 事件,换言之,是可重复读的。

我们在客户端2 中提交,

再次来到客户端1的事务中,发现仍然是读不到的。

,将客户端1的事务提交后,再次开启一个事务,进行查询可以查到。

mysql 5.7后 Repeatable-Read隔离级别通过MVCC和next-key lock来解决幻读。

同样,不可重复读也是如此

下一篇
举报
领券