mysql提供四种隔离级别,以下分别对四种隔离级别进行测试,更加直观清晰的了解。具体的隔离级别以及其他相关介绍见https://www.cnblogs.com/eric-fang/p/11052304.html

一、测试环境:

  1、mysql 5.5.6、Navicat for mysql。

  2、新建表并插入数据

CREATE TABLE `tb_user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
`password` varchar(10) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10010 DEFAULT CHARSET=utf8; INSERT INTO `tb_user`(name,password,sex,age) VALUES ('testname', '111', '2', 27);

1、read uncommitted

-- session01
-- 设置读未提交
SET SESSION TRANSACTION ISOLATION LEVEL read UNCOMMITTED;
-- 开启事务
START TRANSACTION;

-- session02
-- 设置读未提交
SET SESSION TRANSACTION ISOLATION LEVEL read UNCOMMITTED;
-- 开启事务
START TRANSACTION;

-- 查询
SELECT * from tb_user;

结果:

 
 

-- 更新数据
UPDATE tb_user set age=29 where id=10010;

-- 再查询
SELECT * from tb_user;

结果:

虽然session02事务还未提交,但是session01已读取到更新的数据,一旦session02由于某些

原因导致事务回滚,那么session01此时读取到的就是脏数据。如果在对读取到的数据进行相关操作,

就会产生数据不一致问题。

 
   
   

2、read committed

-- session01
-- 设置读已提交
SET SESSION TRANSACTION ISOLATION LEVEL read COMMITTED;
-- 开启事务
START TRANSACTION;

-- session02
-- 设置读已提交
SET SESSION TRANSACTION ISOLATION LEVEL read COMMITTED;
-- 开启事务
START TRANSACTION;

 

-- 更新数据
UPDATE tb_user set age=30 where id=10010;

-- 查询
SELECT * from tb_user;

结果:

读取到的还是老数据,age并没有是新的

 
   COMMIT;

-- 再查询
SELECT * from tb_user;

结果:

解决了脏读问题,但是,session01,前后两次的相同的查询,结果却不一致。即产生了不可重复读的问题

 

3、repeatable read

-- session01
-- 设置读已提交
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- 开启事务
START TRANSACTION;

-- session02
-- 设置读已提交
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- 开启事务
START TRANSACTION;

-- 查询
SELECT * from tb_user;

结果:

 
   -- 更新数据

UPDATE tb_user set age=31 where id=10010;

COMMIT;

 -- 再查询

SELECT * from tb_user;

结果:

可重复读取。

 

注意:在sess01中,如果在commit之前再继续执行UPDATE tb_user set age=age-1 where id=10010; 的话,此时age不是用30来计算的,而是session02中更新后的31来计算,保证了数据的一致性。使用了MVCC机制,select操作不会更新版本号,是快照读(历史版本);insert、update和delete会更新版本号,是当前读(当前版本)。

4、serializable

  串行化执行,会执行悲观锁表,并发度极低,开发工作中基本不会使用。

    

mysql隔离级别的测试的更多相关文章

  1. MySQL MHA 搭建&测试

    一:背景介绍 MHA(Master HA)是一款开源的MySQL的高可用工具,能在MySQL主从复制的基础上,实现自动化主服务器故障转移.虽然MHA试图从宕机的主服务器上保存二进制日志,但并不是总是可 ...

  2. MySQL安装之“测试”

    将MySQL安装完成之后还需要对其进行测试,判断MySQL是否安装成功,MySQL其可视化与我们之前使用过的SQLserver不同.MySQL其中测试方法有两种:一.使用MySQL命令进行测试:二.安 ...

  3. mysql+mycat压力测试一例【转】

    前言 有很多人担心生产系统上新东西的程序怕压力跟不上和稳定性不行,是的,大家都怕,所以领导要求做一次压力测试,我个人也觉得是有必要的. 如果按原理来说,mycat如果不做分片,纯粹只是代理的话,他所做 ...

  4. MySql的入侵测试以及防范

    在做了之前的SQL SERVER之后,便很想尝试一下MYSQL的入侵测试已经防范,与大家一起分享. 总的来说,我一直在用的是MYSQL,对MYSQL比较熟悉,相比较而言,感觉MYSQL更安全,这只是我 ...

  5. python mysql数据库压力测试

    python mysql数据库压力测试 pymysql 的执行时间对比 1,装饰器,计算插入1000条数据需要的时间 def timer(func): def decor(*args): start_ ...

  6. 大数据学习day33----spark13-----1.两种方式管理偏移量并将偏移量写入redis 2. MySQL事务的测试 3.利用MySQL事务实现数据统计的ExactlyOnce(sql语句中出现相同key时如何进行累加(此处时出现相同的单词))4 将数据写入kafka

    1.两种方式管理偏移量并将偏移量写入redis (1)第一种:rdd的形式 一般是使用这种直连的方式,但其缺点是没法调用一些更加高级的api,如窗口操作.如果想更加精确的控制偏移量,就使用这种方式 代 ...

  7. MySQL Test Run 测试框架介绍

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 介绍 MySQL Test Run 简称MTR,是MySQL官方提供的自动化测试框架,执行脚本在发布路径的mysql-te ...

  8. mysql锁 实战测试代码

    存储引擎 支持的锁定 MyISAM 表级锁 MEMORY 表级锁 InnoDB 行级锁 BDB 页面锁 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低.行级锁:开销 ...

  9. mysql注入小测试

    转自:http://www.jb51.net/article/46163.htm 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符.通常,用户可以通过以下接口调用数据库的内容:URL地址栏 ...

随机推荐

  1. 多线程之NSThread

    关于多线程会有一系列如下:多线程之概念解析 多线程之pthread, NSThread, NSOperation, GCD 多线程之NSThread 多线程之NSOperation 多线程之GCD一, ...

  2. AVL树(二叉平衡树)详解与实现

    AVL树概念 前面学习二叉查找树和二叉树的各种遍历,但是其查找效率不稳定(斜树),而二叉平衡树的用途更多.查找相比稳定很多.(欢迎关注数据结构专栏) AVL树是带有平衡条件的二叉查找树.这个平衡条件必 ...

  3. JavaScript浮点数运算的精度问题

    之前在做浮点数计算时,偶然发现计算结果有误差,度娘了解了下,补充整理了下. 误差是什么样子的呢?举例 console.log(0.1+0.2); // 0.30000000000000004 事实上在 ...

  4. ArcMap和ArcGIS Pro加载百度地图

    前面发布了两篇我用ArcBruTile开发用于ArcMap加载百度地图的插件ArcBruTileBaidu,放在网上后评论和反响还不错,还有两位大学同学通过百度搜索居然搜到我本人!文章和技术介绍也被网 ...

  5. javascript语言精粹数组篇之Array的方法注意事项

    本文并没有详细列出Array方法详解,本文侧重点在于使用Array编程时候要注意的问题.1.Array.concat var o = {name:"Gavin"}; var a1 ...

  6. hdu-6621 K-th Closest Distance

    题目链接 K-th Closest Distance Problem Description You have an array: a1, a2, , an and you must answer ...

  7. HDU 4280 Island Transport(无向图最大流)

    HDU 4280:http://acm.hdu.edu.cn/showproblem.php?pid=4280 题意: 比较裸的最大流题目,就是这是个无向图,并且比较卡时间. 思路: 是这样的,由于是 ...

  8. CodeForces 780 E Underground Lab

    Underground Lab 题解: 如果遍历一棵树,我们可以发现最多需要走的步数也不会超过2 * n步. 所以我们选出一棵树,然后遍历一边这颗树. 然后把序列分成k块就好了. 代码: #inclu ...

  9. 1、pytest中文文档--安装和入门

    目录 安装和入门 安装pytest 创建你的第一个测试用例 执行多个测试用例 检查代码是否触发一个指定的异常 在一个类中组织多个测试用例 申请一个唯一的临时目录用于功能测试 安装和入门 Python版 ...

  10. springmvc——@InitBinder注解

    转自http://www.cnblogs.com/douJiangYouTiao888/p/6765220.html 有些类型的数据是无法自动转换的,比如请求参数中包含时间类型的数据,无法自动映射到C ...