一、实验数据:

建表语句:

CREATE TABLE `isolation` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

创建表名为:isolation的表,其中有两个字段,一个 id ,一个 name

原始数据:

insert into ISOLATION values(1,'name1'),(2,'name2'),(3,'name3');

插入三条记录。

二、准备:

分别打开两个mysql客户端A 、B

查看当前客户端隔离级别

SELECT @@tx_isolation

mysql InnoDB默认隔离级别为可重复读。

设置B客户端不自动提交:

查看自动提交设置:

show session variables like 'autocommit';

mysql InnoDB默认自动提交。

设置不自动提交:

set session autocommit=0;

客户端设置不自动提交事物成功。

一、脏读实验开始---------------------------------------

设置A的隔离级别为读未提交:

set session transaction isolation level read uncommitted;

客户端B启动一个事物

发现update的数据没有提交就读到了,回滚之后导致脏读。

发现insert的数据没有提交就读到了,回滚之后导致脏读。

发现delete的数据没有提交就读到了,回滚之后导致脏读。

脏读实验结束---------------------------------------

结论,脏读会读没有提交的update insert delete。

读已提交实验开始---------------------------------------

设置A的隔离级别为读已提交:

set session transaction isolation level read committed;

update的时候------>>>发现解决了脏读,但是在一个事物里面,两次查询的结果不一致,即解决不了重复读的问题

insert的时候------>>>发现解决了脏读,但是在一个事物里面,两次查询的结果不一致,即解决不了重复读的问题

delete的时候------>>>发现解决了脏读,但是在一个事物里面,两次查询的结果不一致,即解决不了重复读的问题

读已提交实验结束---------------------------------------

结论:解决了脏读,但是一个事物里面,同一个查询结果不一致,不能解决重复读的问题。

可重复读实验开始---------------------------------------

数据重新清理一下:

update的时候------>>>在一个事物里面,两次查询直间,读不到另外事物提交的内容,只有提交当前事物,新启事物查询的时候才能查到更新的,即解决不了重复读的问题

delete的时候------>>>在一个事物里面,两次查询直间,读不到另外事物提交的内容,只有提交当前事物,新启事物查询的时候才能查到更新的,即解决不了重复读的问题

insert的时候------>>>在一个事物里面,两次查询直间,读不到另外事物提交的内容,只有提交当前事物,新启事物查询的时候才能查到更新的,即解决不了重复读的问题

可重复读实验结束---------------------------------------

结论:解决了脏读,可重复读,好像mysql 5.7.26在可重复读隔离级别解决了 幻想读的现象(猜测,还没太明白)。

串行化读实验开始---------------------------------------

串行化读实验结束--------------------------------------

结论:串行化后,当一个事物没有提交,另外的事物不能修改对数据进行(update,insert,delete操作)。

mysql事务隔离级别实验的更多相关文章

  1. mysql事务隔离级别、脏读、幻读

    Mysql事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...

  2. MySQL事务隔离级别(一)

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

  3. [51CTO]新说MySQL事务隔离级别!

    新说MySQL事务隔离级别! 事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!本文所讲大部分内容,皆有官网作为佐证,因此对本文内 ...

  4. 查询mysql事务隔离级别

    查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava   1.查看当前会话隔离 ...

  5. MySQL事务隔离级别测试实例

    https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...

  6. Mysql事务-隔离级别

    MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...

  7. MySQL事务隔离级别 解决并发问题

    MySQL事务隔离级别 1. 脏读: 骗钱的手段, 两个窗口或线程分别调用数据库转账表,转账后未提交,对方查看到账后,rollback,实际钱没转. 演示方法: mysql默认的事务隔离级别为repe ...

  8. mysql事务隔离级别与设置

    mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...

  9. MySQL事务隔离级别(二)

    搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...

随机推荐

  1. Android开发Tips(3)

    欢迎Follow我的GitHub, 关注我的CSDN. 我会介绍关于Android的一些有趣的小知识点. 本文是第三篇, 其余第一篇, 第二篇. imageMogr2/auto-orient/stri ...

  2. Java集合框架:Arrays工具类

    java.util.Arrays类能方便地操作数组,它提供的方法都是静态的.整个Arrays工具类的实现有3000+行.可是归纳总结一下可知它有下面功能(9个): 1. asList 定义: @Saf ...

  3. (转)CSS3全局实现所有元素的内边距和边框不增加

    全局设置 border-box 很好,首先它符合直觉,其次它可以省去一次又一次的加加减减 它还有一个关键作用——让有边框的盒子正常使用百分比宽度.但是使用了 border-box 可能会与一些依赖默认 ...

  4. SpringInAction4笔记——装配

    重点:常用的上下文环境 AnnotationConfigApplicationContext ClassPathXmlApplicationContext FileSystemXmlApplicati ...

  5. SpringCloud遇到的坑

    1. 今天使用Feign 调用其他项目,结果一直跳转到断路器,跟踪发现是接口响应时间较长,解决方案 解决:# 在 Feign 模块中,单独设置这个超时时间不行,还要额外设置 Ribbon 的超时时间, ...

  6. org.apache.flume.EventDeliveryException: NettyAvroRpcClient { host: hadoop1, port: 41414 }: Failed to send event

    org.apache.flume.EventDeliveryException: NettyAvroRpcClient { host: hadoop1, port: 41414 }: Failed t ...

  7. BusyBox下ftpget的使用方法

    在终端输入ftpget命令,可以得到以下帮助信息: BusyBox v1.17.4 (2010-12-22 10:59:18 CST) multi-call binary. Usage: ftpget ...

  8. 使用proc接口例子【转】

    本文转载自:http://blog.csdn.net/mike8825/article/details/52434666 版权声明:本文为博主原创文章,未经博主允许不得转载. 在上一篇的使用sys接口 ...

  9. 利用JS判断当前来路域名并跳转到指定页面

    某网站绑定了多个域名,默认情况下访问这些域名的时候是指向网站的首页,也就是访问不同域名时看到的页面是一样的,现在需要访问不同域名时显示不同页面. 一般情况下,可以用子站绑定域名的方法来实现,访问不同的 ...

  10. jQuery制作信息提示弹出层插件【推荐】

    给大家分享一款非常实用的弹窗提示窗口插件,包含多种模式.带有回执函数值的功能.​1. [代码][JavaScript]代码 <script type="text/javascript& ...