mysql事务隔离级别实验
一、实验数据:
建表语句:
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事务隔离级别实验的更多相关文章
- mysql事务隔离级别、脏读、幻读
Mysql事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...
- MySQL事务隔离级别(一)
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...
- [51CTO]新说MySQL事务隔离级别!
新说MySQL事务隔离级别! 事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!本文所讲大部分内容,皆有官网作为佐证,因此对本文内 ...
- 查询mysql事务隔离级别
查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava 1.查看当前会话隔离 ...
- MySQL事务隔离级别测试实例
https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...
- Mysql事务-隔离级别
MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...
- MySQL事务隔离级别 解决并发问题
MySQL事务隔离级别 1. 脏读: 骗钱的手段, 两个窗口或线程分别调用数据库转账表,转账后未提交,对方查看到账后,rollback,实际钱没转. 演示方法: mysql默认的事务隔离级别为repe ...
- mysql事务隔离级别与设置
mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...
- MySQL事务隔离级别(二)
搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...
随机推荐
- apk解包——修改后缀为zip
将apk修改后缀为zip后,可直接解包查看资源文件
- centos下的hadoop服务器的配置
是我安装CentOS服务器的过程,记录下来,与大家一起分享. 安装操作系统 CentOS 6.2 ,CentOS-6.2-i386-bin-DVD1.iso(32位) ,CentOS-6.2-x86_ ...
- HDU 4334 Trouble(哈希|线性查找)
给定五个集合.问是否能从五个集合各取一个元素,使得元素之和为0. 这道题有两种做法,一种是哈希,然而之前没写过哈希.....比赛后从大神那copy了一份. 这里说还有一种. 对于这五个集合分为三组.1 ...
- Ubuntu 16.04 LTS安装Eclipse配置Pydev
原材料: 下载 jdk-8u121-linux-x64.tar.gz 下载 eclipse-jee-neon-2-linux-gtk-x86_64.tar.gz 1.安装jdk sudo mkdir ...
- rpm的gpg key
1 gpg 这是一种公钥.私钥机制. 2 rpm包的格式 rpm包由四部分构成,lead.signature.header和archive构成. 这里的签名(signature)是加密了的,也就是说, ...
- HDFS vs. MongoDB
HDFS MongoDB 共同点 http://www.mongoing.com/wp-content/uploads/2016/08/MDBSH2016/TJ_MongoDB+Spark.pdf 横 ...
- var和let的区别(详解)
1. 作用域 通过var定义的变量,作用域是整个封闭函数,是全域的 . 通过let定义的变量,作用域是在块级或是子块中. function varTest() { var x = 1; if (tru ...
- POJ3436 ACM Computer Factory —— 最大流
题目链接:https://vjudge.net/problem/POJ-3436 ACM Computer Factory Time Limit: 1000MS Memory Limit: 655 ...
- Objective-C - - 字符串与数字互相转换
NSString *string = @"123"; // 1.字符串转int int intString = [string intValue]; // 2.int装字符串 NS ...
- 一步一步学Silverlight 2系列(31):图形图像综合实例—实现水中倒影效果
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...