淘宝上网站建设为啥这么便宜,网站被降权后怎么办,网站规划书包括哪些内容,网站建设及安全管理文档最近在阅读一篇关于隔离级别的文章#xff0c;文章中提到了一种场景#xff0c;我们下面来分析一下。 文章目录 1、实验环境2、两个实验的语句执行顺序3、关于start transaction和start transaction with consistent snapshot4、实验结果解释4.1、实验14.2、实验24.3、调整实…最近在阅读一篇关于隔离级别的文章文章中提到了一种场景我们下面来分析一下。 文章目录 1、实验环境2、两个实验的语句执行顺序3、关于start transaction和start transaction with consistent snapshot4、实验结果解释4.1、实验14.2、实验24.3、调整实验1达到和实验2一样的效果 1、实验环境
版本5.7.30-log 隔离级别RR
2、两个实验的语句执行顺序 3、关于start transaction和start transaction with consistent snapshot
这篇文章讨论的问题是start transaction和start transaction with consistent snapshot这两条命令的区别。 start transaction开启事务但只有发生第一条和InnoDB有关系的sql语句时事务才开始生效。也就是说单独执行start transaction并不会开启事务只有执行一条sql语句才可以select语句都行。 start transaction with consistent snapshot开启一致性快照读这个命令的含义就相当于执行start transaction后紧接着执行一条select意思是立即开启事务。
4、实验结果解释
能理解标题3的内容上面的案例就很好理解了我们来讨论一下。
4.1、实验1
实验1中事务A和事务B的语句执行顺序为 事务Bselect 事务Astart transaction此时事务A并没有开启事务 事务Binsert事务B是一个自动事务执行完即提交 事务Aselect真正开启事务 此时事务A是能查询到事务B新增的数据的。因为在事务A真正开启事务之前事务B已经提交了事务A开启事务时肯定是能读取到其他事务已提交的结果的
4.2、实验2
实验2中事务A和事务B的语句执行顺序为 事务Bselect 事务Astart transaction with consistent snapshot事务A开启事务 事务Binsert事务B是一个自动事务执行完insert即提交 事务Aselect 此时事务A就不能读取到事务B新增的数据这是InnoDB不可重复读所做的事情
4.3、调整实验1达到和实验2一样的效果
实验1调整一下事务A语句的执行顺序就不会读取到事务B的新增数据了。 事务Bselect 事务Astart transaction此时事务A并没有开启事务 事务Aselect真正开启事务 事务Binsert事务B是一个自动事务执行完insert即提交 事务Aselect事务A在事务B执行insert前已经开启事务因为RR隔离级别下不可重复读的原因所以就读取不到事务B新增的数据