mysql事务之间的隔离级别
事务间未做隔离,会引起下面这些问题。
1、脏读:一个事务可读到另外一个尚未commit的事务中的数据。
2、不可重复读:在一个事务中,读取同一个数据 a,b,按顺序读取,在读a b 之间,另外一个事务修改了这个数值,并且提交了。这时,在这同一事务中,两次读取的值就不同了。
3、幻读:事务A,更新日期2017至2018之间的数据,将字段test_value都置为0。
但是此时,事务B又新插入一条2017至2018之间的数据,test_value为1。
最后的结果,事务A在表面上没有更新全部的,而漏掉了一条。
mysql的事务间的隔离级别分为下面几个级别(由高到低)
1、串行锁(可解决脏读,不可重复读,幻读的问题)
2、可重复读
3、读已commit
4、无隔离
四种事物隔离级别由低到高分别可以避免脏读、不可重复读和幻读。但是随着事物隔离级别的提高,系统开销也会不断提升。MySQL默认的事物隔离级别是第三级(Repeatable read)也是最常用的级别。
| 脏读 | 不可重复读 | 幻读 | |
| Read uncommitted | √ | √ | √ |
| Read committed | √ | √ | |
| Repeatable read(默认) | √ | ||
| Serializable |
一、Read uncommitted
处在Read uncommitted级别的事物能够被其他事物读取语句间的数据,因此会出现其它事物读取了还未提交的数据。如果当前事物不发生回滚,则不会产生问题。效率最高,但不推荐。

二、Read committed
当前事物隔离级别,其它事物无法读取到已经被修改但是还未被提交的数据。但是其它事物线程也不会被阻塞,这意味着如果存在并发事物尝试读取当前正在被修改的数据行时可能会读取到原始数据。要避免这样的问题需要当有事物正在修改行级数据的时候,其它事物无论读或者写都必须被阻塞。

上表两次发出的select A from语句都是对同一行数据的查询。由于两条事物相互隔离,因此不会读到另一条线程中的操作数。但是依然可以读取当前行的原始数据,因此会造成两次读取的结果不一致。
三、Repeatable read(默认)
Repeatable read级别是MySQL默认的隔离级别,除非使用者明确修改。当前级别下的事物会同时为当前行增加读写的行级锁或页级锁,操作完毕以后随即unlock tables;如果在并发的事物中存在读取当前行数据的行为时,事物将被阻塞。直到获取行级锁的时候才能够继续操作并同时阻塞别的线程。

在当前隔离级别下,大部分的数据操作都是安全的。唯一可能发生问题的情况是事物需要插入数据或删除数据的时候,由于行级锁并未对表锁定。因此对于数据表的遍历可能会发生幻读错误。解决幻读问题的关键事物对任何数据表的操作,同时使用表级锁。其它任何并发事物都必须等待当前操作完成。从宏观上观察,就是杜绝了事物的并发操作。
四、Serializable
序列化事物是最高的事物隔离级别,也是最占用系统资源的操作。可以避免所有问题,但也不被推荐。

相关命令
1.查看当前会话隔离级别
select @@tx_isolation;
2.查看系统当前隔离级别
select @@global.tx_isolation;
3.设置当前会话隔离级别
set session transaction isolatin level repeatable read;
4.设置系统当前隔离级别
set global transaction isolation level repeatable read;
5.命令行,开始事务时
set autocommit=off 或者 start transaction
mysql事务之间的隔离级别的更多相关文章
- 一文彻底读懂MySQL事务的四大隔离级别
前言 之前分析一个死锁问题,发现自己对数据库隔离级别理解还不够清楚,所以趁着这几天假期,整理一下MySQL事务的四大隔离级别相关知识,希望对大家有帮助~ 事务 什么是事务? 事务,由一个有限的数据库操 ...
- mysql事务四种隔离级别
事务的基本要素:原子性,一致性,隔离性,持久性. 事务并发问题:脏读,不可重复读,幻读. mysql隔离级别:read-uncommitted,read-committed,repeatable-re ...
- Mysql 事务特性和隔离级别
事务的特性 原子性(Atomicity) 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会被回滚(Rollback)到 ...
- 深入解析Mysql中事务的四大隔离级别及其所解决的读现象
本文详细介绍四种事务隔离级别,并通过举例的方式说明不同的级别能解决什么样的读现象.并且介绍了在关系型数据库中不同的隔离级别的实现原理. 在DBMS中,事务保证了一个操作序列可以全部都执行或者全部都不执 ...
- 数据库事务中的隔离级别和锁+spring Transactional注解
数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题.ACID首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(At ...
- 数据库事务的四大特性以及事务的隔离级别-与-Spring事务传播机制&隔离级别
数据库事务的四大特性以及事务的隔离级别 本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ ...
- [转]数据库事务中的隔离级别和锁+spring Transactional注解
数据库事务中的隔离级别和锁 数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性.安全性也是我们需要研究的问题.ACID首先总结一下数据库事务正确执行的四个要素(ACID): 原子性(At ...
- MySQL 的 4 种隔离级别,你了解么?
1.什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做.事务的结束 ...
- MySQL与Oracle的隔离级别
一.事务和隔离级别 事务的概念:事务是把对数据库的一系列操作都看做一个整体,要么全部成功,要么全部失败,利用事务我们可以保证数据库的完整性,事务具有原子性. 隔离级别:隔离级别定义了事务与事务之间的隔 ...
随机推荐
- Unity3D学习笔记(五)C#与JavaScript组件访问的比较
由于之前用JavaScript用的比较多,因此总是想用以前的方法来访问组件,却屡遭失败,经过查阅资料发现,二者存在较大的不同. 下面以调用3D Text组件HurtValue为例,来比较二者的不同 J ...
- ITU-T Technical Paper: QoS 测量 (目标,方法,协议)
本文翻译自ITU-T的Technical Paper:<How to increase QoS/QoE of IP-based platform(s) to regionally agreed ...
- Android性能优化典例(二)
1.使用 Maven 依赖方案代替使用导入jar包方案 如果项目中需要用到第三方jar包,常用的做法是去网上下载后然后放入libs文件夹,再添加到项目依赖,不过,在Android Studio已经不推 ...
- obj-c编程13:归档
这篇归档内容的博文也挺有趣的,笨猫对好玩的东西一向感兴趣啊!如果用过ruby就会知道,obj-c里的归档类似于ruby中的序列化概念,不过从语法的简洁度来说,我只能又一次呵呵了. 下面大家将会看到2种 ...
- Python_让人脑阔疼的编码问题(转)+(整理)
我们要知道python内部使用的是unicode编码,而外部却要面对千奇百怪的各种编码,比如作为中国程序经常要面对的gbk,gb2312,utf8等,那这些编码是怎么转换成内部的unicode呢? 首 ...
- 服务端搭建——腾讯云通信(IM)
前言 在手机app中因为需要即时聊天功能,在项目采用腾讯云通信服务.如下流程图: 当手机端拿到签名后,就可登录IM,使用im提供的sdk收发信息. 准备工作 1.在腾讯云注册获取appid 2.申请开 ...
- Thinkphp3.2简单解决多文件上传只上传一张的问题
html简单页面: index.html代码: <form action="{:U('index/upload')}" method="post" enc ...
- 排序算法入门之希尔排序(java实现)
希尔排序是对插入排序的改进.插入排序是前面元素已经有序了,移动元素是一个一个一次往后移动,当插入的元素比前面排好序的所有元素都小时,则需要将前面所有元素都往后移动.希尔排序有了自己的增量,可以理解为插 ...
- WSL与Windows交互实践
1. WSL是什么 2. WSL新特性 3. WSL管理配置 4. WSL交互 5. 解决方案 * 5.1 使用别名 * 5.2 多复制一份 * 5.3 重定向 * 5.4 symlink 6 ...
- C++各个存储区
#include<iostream.h>void main(){char a[]="abc";栈 char b[]="abc";栈 char* c= ...