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才能一个一个的执行。

相关推荐
S1998_1997111609•X20 小时前
论当今社会主义与人文关怀人格思想下的恶意仿生注入污染蜜罐描述进行函数值非法侵入爬虫的咼忄乂癿〇仺⺋.
数据库·网络协议·百度·ssh·开闭原则
倔强的石头_21 小时前
kingbase备份与恢复实战(六)—— 备份自动化与保留策略:Windows任务计划+日志追溯
数据库
轻刀快马1 天前
别被 ORM 框架宠坏了:从一场“订单消失”悬案,看懂 MySQL 为什么要强推 InnoDB
数据库·mysql
后端漫漫1 天前
Redis 客户端工具体系
数据库·redis·缓存
PaperData1 天前
1988-2025年《中国人口和就业统计年鉴》全年份excel+PDF
数据库·人工智能·数据分析·经管
星河耀银海1 天前
C语言与数据库交互:SQLite实战与数据持久化
c语言·数据库·sqlite·交互
过期动态1 天前
MySQL中的约束
android·java·数据库·spring boot·mysql
程序员陆通1 天前
月烧 400 刀到不到 20 刀:我是怎么把 OpenClaw 的 Token 账单砍掉 95% 的
java·前端·数据库
Shan12051 天前
站在计算机领域视角看:SQL注入攻击
网络·数据库·sql
轻刀快马1 天前
别干背八股文了:从一场“双十一秒杀”惨案,看懂 InnoDB 事务、锁与索引的底层齿轮
数据库·sql