1. 事务的隔离级别

1.1 read uncommited:读未提交。一个事务读到了另一个事务未提交的脏数据,称之为脏读

1.2 read commited:读已提交。解决了脏读问题,但当前事务两次的读取内容由于另一个事务修改并提交而不一致,出现了不可重复读

1.3 repeatable read:可重复读。解决了不可重复读,也就是当前事务读不到其它事务修改并提交的数据,从而不会出现不可重复读问题。

1.4 serializable:串行化。解决了幻读问题,也就是当前事务没有结束,其它事务无法进行其它任何操作,串行化操作。

2. 各个隔离级别的功能验证

2.1 首先,MySQL的默认隔离级别是可重复读,如下。

2.2 读未提交隔离级别下的操作。

虽然系统属性可以作用于所有会话,但是每次系统属性更改后并不能立即在当前会话中起作用,需要退出重新进入;所以为了不退出重新进入,我们进入每个会话,都对当前会话的自动提交和隔离级别进行修改,操作如下。

// 更改当前会话的隔离级别和自动提交
set @@tx_isolation='xxx';
set @@autocommit=0;// 属性前有global是系统属性值
set @@global.tx_isolation='xxx';
set @@global.autocommit=0;

虽然说变量前不加global时,是会话属性,但是我这边修改失败了。

总结:①所以修改系统或会话属性时,添加对应global或session更好,省略有时会有问题。②每次测试完一个隔离级别后,尽可能退出重新进入,我这边连续测试隔离级别时会有问题。

两个事务进行相应操作,如下图。

2.3 读已提交隔离级别下的操作。

还是保证事务的自动提交处于关闭状态,并且更改事务隔离级别为read-committed,如下图;

两个事务进行相应操作,如下图。

read committed隔离级别解决了脏读问题,但是出现了不可重复读问题。

2.4 可重复读隔离级别下的操作

还是保证事务的自动提交处于关闭状态,并且更改事务隔离级别为repeatable-read,如下图;

两个事务进行相应操作,解决了不可重复读问题,如下图。

以下图片,说明mysql的repeatable read隔离级别可以解决幻读问题?

repeatable read隔离级别解决了不可重复读的问题,同时不存在幻读问题,这是为什么?网上的教程不都说该隔离级别存在幻读问题吗?

其实这里涉及到快照读当前读内容,上面的普通查询语句属于快照读。快照读:在事务首次select数据时,生成快照数据,之后的读操作都会使用该快照数据(包含了其它库和其它表的数据),因此repeatable read隔离级别下可以有效地避免不可重复读以及读数据的幻读问题,如果中途有增删改等更新操作,仍然出现幻读问题。快照读只在read committed和repeatable read两种隔离级别才有,read committed隔离级别下每次读取数据都会更新快照数据,而Repeatable Read只在事务首次读取数据生成快照数据,之后读操作都使用第一次的快照当前读:也叫锁定读,有两种方式:①select ... lock in share node;②select ... for update。这种查询其实是对相应记录加锁,其它事务的当前读以及增删改等操作都会被阻塞,如下图。

2.5 ①快照读在首次读取数据才有快照;②会对其它库的表数据进行“快照”,不仅仅是当前操作数据。验证如下图。

2.6 当前读不会出现幻读问题,因为操作都被阻塞了,如下图。

MySQL事务的四种隔离级别,mysql中的不可重复读和幻读的区别,Repeatable read可重复读隔离级别下怎么不存在幻读问题?相关推荐

  1. MySQL事务的四种隔离界别以及会造成的问题和解决办法

    MySQL事务的特性:原子性.隔离性.持久性.一致性 MySQL四种隔离界别:读未提交.读已提交.可重复度.串行化 一.读未提交(read uncommitted): 读未提交:那个问题都不能解决.容 ...

  2. 如何看mysql版本_如何查看mysql版本的四种方法,MySQL版本查看

    1:在终端下:mysql -V. 以下是代码片段: [shengting@login ~]$ mysql -V mysql Ver 14.7 Distrib 4.1.10a, for redhat-l ...

  3. mysql四种事务级别_【MySQL 知识】四种事务隔离级别

    摘要:本篇文章主要是为了对MySQL的四种事务隔离级别的介绍.为了保证数据库的正确性与一致性,数据库事务具有原子性(Atomicity).一致性(Consistency).隔离性(Isolation) ...

  4. 事务的四种隔离级别(一)Read uncommitted

    背景知识 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 之所以提出事务隔离级别,是因为同一个应用程序中的多个事务或不同应用程序中的多个事务在同一个数据集上并发执行时, 可能会 ...

  5. mysql体系结构及四种部署方式

    目录 mysql体系结构 MySQL安装部署 mysql体系结构 一.连接层 思想 为解决资源的频繁分配-释放所造成的问题,为数据库连接建立一个"缓冲池". 原理 预先在缓冲池中放 ...

  6. 查看mysql版本的四种方法

    2019独角兽企业重金招聘Python工程师标准>>> 查看mysql版本的四种方法 1:在终端下:mysql -V. 以下是代码片段: [shengting@login ~]$ m ...

  7. 查看mysql数据库版本_MySQL数据库之查看MySQL版本的四种方法

    本文主要向大家介绍了MySQL数据库之查看MySQL版本的四种方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.终端下直接使用mysql命令 [root@localhos ...

  8. MySQL支持的四种索引_Mysql常见四种索引的使用

    提到mysql优化,索引优化是必不可少的.其中一种优化方式 --索引优化,添加合适的索引能够让项目的并发能力和抗压能力得到明显的提升. 我们知道项目性能的瓶颈主要是在"查(select)&q ...

  9. linux下查看mysql版本的四种方法

    Linux查看MySQL版本的四种方法 1 在终端下执行 mysql -V 2 在help中查找 mysql --help |grep Distrib 3 在mysql 里查看 select vers ...

最新文章

  1. 一段关于Unix与 Linux的暗黑史
  2. python使用psutil获取系统(Windows Linux)所有运行进程信息实战:CPU时间、内存使用量、内存占用率、PID、名称、创建时间等;
  3. Jupyter安装r内核
  4. 2020年6月学术会议变动汇总
  5. 如何搭建高接通率的音视频场景?
  6. spring-AOP前言
  7. 创建一个动物类 java_使用java面向对象创建动物类并输出动物信息
  8. (软件工程复习核心重点)第四章总体设计-第一节:总体设计基本概念和设计过程
  9. Matlab中用到的bsxfun函数
  10. 机器学习集成模型学习——Stacking集成学习(五)
  11. 小米集团国际总部落地深圳;国美电器创始人黄光裕出狱;TiKV 4.0 发布 | 极客头条...
  12. mysql 日期分隔符_sql中的日期处理
  13. python 文本替换 速度_python 实现批量替换文本中的某部分内容
  14. 悦动圈跑步 随意提交步数 重大BUG漏洞 希望官方早些修复
  15. python黑白棋设计思路_[黑白棋]规则、大食策略及AI转化思考
  16. 软件已删除,但在控制面板里还有,就是删不掉.怎么办?
  17. 尚硅谷-SpringMVC篇
  18. 【泛函分析】距离空间和赋范空间
  19. Linux就该这么学第十三节课学习心得
  20. traceroute工作原理

热门文章

  1. 【Python】Flask 框架安装虚拟环境报错—处理中......
  2. ABAP 在字符串之间加入若干空格
  3. 11、Power Query-透视列的解析
  4. 如何用模型分析中国经济?
  5. Oracle 触发器的使用小结
  6. 如何用C语言清空特定文件夹中的所有文件
  7. ajax c 提交form,使用ajax提交form表单,包括ajax文件上传
  8. 遍历文件夹_使用JavaScript遍历本地文件夹的文件
  9. linux文件系统pdf_一篇文章理解Ext4文件系统的目录
  10. python数据分析工资_python3对拉勾数据进行可视化分析的方法详解