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的隔离级别
一.事务和隔离级别 事务的概念:事务是把对数据库的一系列操作都看做一个整体,要么全部成功,要么全部失败,利用事务我们可以保证数据库的完整性,事务具有原子性. 隔离级别:隔离级别定义了事务与事务之间的隔 ...
随机推荐
- Android开发你不知道的TIPS
1.Space space是Android 4.0中新增的一个控件,它实际上可以用来分隔不同的控件,其中形成一个空白的区域.这是一个轻量级的视图组件,它可以跳过Draw,对于需要占位符的任何场景来说都 ...
- Weka 算法大全
关联规则挖掘 (一) Apriori (二) FilteredAssociator (三) FPGrowth (四) GeneralizedSequentislPatterns (五) Pr ...
- Android MTK平台最完备的开机动画修改教程
修改手机的开机动画不是什么难事儿. 但修改一款很冷门的"山寨机",就不太好修改第一屏了. 手机是MTK的一款手机,虽然比较贵(价格超过三星Note3),但在我看来跟山寨机木有啥区别 ...
- HOW to Use QP_PREQ_PUB.PRICE_REQUEST API to Price an Item
In this Document Goal Solution References APPLIES TO: Oracle Advanced Pricing - Version 11.5.10 ...
- 二分算法C实现
#include <stdio.h> #include <stdlib.h> #define NR(x) (sizeof(x)/sizeof(x[0])) int Binary ...
- 关于最新的APP上架流程
苹果官方在2015年05-06月开发者中心进行了改版,网上的APP Store上架大部分都不一样了,自己研究总结一下,一个最新的上架教程以备后用 1.1.前期工作 首先你需要有一个苹果的开发者帐号,一 ...
- Jmeter(二十五)_Xpath关联
在Jmeter中,除了正则表达式可以用作关联,还有一种方式也可以做关联,那就是 XPath Extractor.它是利用xpath提取出关键信息,传递变量. 具体用法 添加一个后置处理器-XPath ...
- JVM terminated. Exit code=8096
http://www-01.ibm.com/support/docview.wss?uid=swg21303648 Technote (troubleshooting) Problem(Abstrac ...
- Memcache架构新思考
2011年初Marc Kwiatkowski通过Memecache@Facebook介绍了Facebook的Memcache架构,现在重新审视这个架构,仍有很多方面在业界保持先进性.作为weibo内部 ...
- Day5_协程函数_面向过程
def func(count): while True: yield count count +=1 #这是一个生成器,需要利用next()来执行. func(10) #yield: #1.把函数的执 ...