MySQL高级(事务隔离界别)

1.如何查, 设置mysql的隔离界别

什么是全局隔离级别?

话隔离界别就是session.tx_isolation。 也就是只影响这一次登录。 而全局隔离级别global.tx_isolation也影响后续的登录。

复制代码
select @@global.transaction_isolation;--查看全局隔级别
复制代码
select @@transaction_isolation; --查看会话(当前)全局隔级别
复制代码
select @@transaction_isolation; --查看会话(当前)全局隔级别
复制代码
select @@session.transaction_isolation; --查看会话隔离界别
复制代码
set [session | global] transaction isolation level {read uncommitte | read committed | repeatable read | serializable}
  • 设置当前会话串行化

    set session transaction isolation level serializable;

  • 但是新起会话不收到影响
  • 再设置回来

    set session transaction isolation level read uncommitted;

  • 如果全局隔离级别和会话隔离级别不同, 就会默认使用会话隔离级别。

2.读未提交

  • 先启动两个事务
  • 然后右边查看一下表中的数据
  • 然后在左边插入数据
  • 之后再从右边查看, 就能看到数据已经查看到了。

我们左边还没提交呢, 右边就能看到。 这就叫什么, 这就叫做读未提交!一个事务在执行中,读到另一个事务的更新但是还没有commit的数据, 这种情况叫做脏读。------这是一种不合理的现象。

  • rollback回滚也能看到数据又恢复了

2.读提交

  • 先将事务的隔离级别改为读提交

    set session transaction isolation level read committed;

  • 两边启动事务
  • 先查看一下表中的数据
  • 然后我们插入数据
  • 但是我们左边查的话就能看到

  • 然后我们左边提交commit

  • 右边再查, 就会看到数据修改了

这种一旦提交就能看到的就叫做读提交。 读提交好像解决了脏读的问题。 但是又出现了另一个问题:就是我们左边在提交前和提交后, 我们右边select查到的数据结果是不一样的。 也就是说我们右边一直select, 结果某一次select的时候, 数据突然变了。 ------这种现象, 就叫做不可重复读。

3.可重复读

  • 先设置可重复读
  • 启动我们的事务

  • 然后查看我们的数据

  • 然后我们进行插入,之后右边查看, 会发现, 右边没有数据更新
  • 然后我们左边直接提交了, 右边也看不见
  • 然后重启事务, 就能看到了

对于可重复读, 有的数据库因为insert的插入有些特殊, insert不能可重复读。所以就形成了幻读现象, 也就是好像出现了幻觉一样。 mysql是解决了这个问题的。

4.串行化

  • 设置隔离级别

  • 然后启动事务, 先启动左边事务, 再启动右边事务

  • 然后左侧查找, 能将数据查出来

  • 然后右边我们也查, 也能查出来

  • 然后我们右边删除一下数据张三, 我们会发现, 右边的事务卡在这里了

  • 后我们左边的事务commit一下,右边的事务就启动了

  • 然后我们重启左边事务, 又在右边删除数据田七。 会发现右边不阻塞了

上面这种现象就是串行化的现象, 一开始左边事务先启动, 默认他先执行。 然后右边事务即便修改, 也会阻塞在那里。 然后我们左边事务提交了,再启动。它的顺序相当于在右边事务的后面了。 右边事务就不会被阻塞了。
所以我们发现一个问题, 就是如果我们的客户端里面是查的话, 就直接执行了。但是如果是增删改操作, 就会判断是不是该这个客户端执行,如果不是,就将sql放到等待队列里。前面的事务结束了, 这些sql才能一个一个的执行。

5.总结

所以我们发现一个问题, 就是如果我们的客户端里面是查的话, 就直接执行了。但是如果是增删改操作, 就会判断是不是该这个客户端执行,如果不是,就将sql放到等待队列里。前面的事务结束了, 这些sql才能一个一个的执行。

相关推荐
Decay__9 小时前
18_MySQL 智能巡检方案 —— 巡检项清单 / 一键巡检脚本 / 健康评分
运维·数据库·sql·mysql·架构
java_logo9 小时前
Docker 部署 Liquibase:轻松搭建数据库变更管理
数据库·docker·容器·数据库管理·liquibase·轩辕镜像·数据库变更
凤凰院凶涛QAQ10 小时前
《MySQL内核拆解:从SQL到InnoDB》(四) : 联合查询 & 视图
数据库·sql·mysql
码农小河6610 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
张小姐的猫10 小时前
【MySQL】访问 & 数据流动原理
android·数据库·mysql·adb·1024程序员节
这个DBA有点耶14 小时前
信创场景下数据同步软件怎么选?对比开源CDC与原生闭环工具的结构性差异
数据库·mysql·架构
多客:duokelijie15 小时前
代练订单系统选型思路:跨品类游戏接入、订单分层管理、自动结算逻辑拆解!
数据库·mysql·微信小程序·前端框架·uni-app·php·持续部署
PingCAP15 小时前
平凯星辰上榜!2026 年胡润全球独角兽企业
数据库
PingCAP15 小时前
轨道交通 AFC 系统升级,平凯 Loop 把跨部门协同变成可追溯闭环
数据库