前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《sql必知必会》——读书笔记(4)

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

作者头像
MickyInvQ
发布2020-09-27 10:15:10
3980
发布2020-09-27 10:15:10
举报
文章被收录于专栏:InvQ的专栏InvQ的专栏

模拟mysql 几种隔离级别

sql几种隔离级别的定义

在这里插入图片描述
在这里插入图片描述
准备数据库和数据表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

mysql> SHOW VARIABLES LIKE 'transaction_isolation'

mysql默认可重复读

在这里插入图片描述
在这里插入图片描述

改为read uncommited

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

所以需要设置autocommit=0

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来解决幻读。

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模拟mysql 几种隔离级别
    • 准备数据库和数据表
      • 模拟脏读
        • 模拟“不可重复读”
          • 模拟幻读
          相关产品与服务
          云数据库 SQL Server
          腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档