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

相关推荐
u01092727119 分钟前
使用Scrapy框架构建分布式爬虫
jvm·数据库·python
l1t23 分钟前
DeekSeek辅助总结PostgreSQL Mistakes and How to Avoid Them 的一个例子
数据库·postgresql
醉风塘35 分钟前
JDBC批量操作终极指南:PreparedStatement批处理与事务性能优化实战
数据库·性能优化
2401_8384725138 分钟前
使用Python处理计算机图形学(PIL/Pillow)
jvm·数据库·python
invicinble1 小时前
对于mysql层对sql层面的知识体系的理解和把握
数据库·sql·mysql
2301_790300961 小时前
用Matplotlib绘制专业图表:从基础到高级
jvm·数据库·python
DFT计算杂谈1 小时前
VASP+PHONOPY+pypolymlpj计算不同温度下声子谱,附批处理脚本
java·前端·数据库·人工智能·python
数据知道1 小时前
PostgreSQL核心原理:为什么数据库偶尔会卡顿?
数据库·postgresql
Nandeska2 小时前
14、MySQL基于GTID的数据同步
数据库·mysql