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的隔离级别
一.事务和隔离级别 事务的概念:事务是把对数据库的一系列操作都看做一个整体,要么全部成功,要么全部失败,利用事务我们可以保证数据库的完整性,事务具有原子性. 隔离级别:隔离级别定义了事务与事务之间的隔 ...
随机推荐
- Erlang Rebar 使用指南之二:制作发布版本
Erlang Rebar 使用指南之二:制作发布版本 全文目录: https://github.com/rebar/rebar/wiki 本章位置: https://github.com/rebar/ ...
- mybati源码之ReuseExecutor
/** * @author Clinton Begin */ public class ReuseExecutor extends BaseExecutor { private final Map&l ...
- MongoDB下载安装测试及使用
1.下载安装 64位:mongodb-win32-x86_64-enterprise-windows-64-2.6.4-signed.msi 余数为1的 db.collection.find({ &q ...
- 【39】FlexboxLayout使用介绍
FlexboxLayout介绍: Flexbox 也称为弹性盒子模型 或伸缩盒子模型,广泛用于前端开发,做过前端 web 的都知道Bootstrap 中有一套强大的 CSS Grid网格样式.Boot ...
- Mac OS X版本的sublime text 3安装汇编语言语法支持
sublime是个好东西,小巧.功能强大而且跨平台! 不过默认的语法里没有对asm的支持,这让本猫情何以堪- 下面介绍一下Mac OS X中如何给sublime安装汇编的语法和自动汇编命令补全支持. ...
- 如何通过jQuery获取一个没有定高度的元素---------的自适应高度(offsetHeight的正确使用方法)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=2 (转载)
http://blog.csdn.net/xiyuan1999/article/details/5706230 DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, ...
- javaScript(8)---对象和数组
javaScript(8)---对象和数组 学习要点: 1.Object类型 2.Array类型 3.对象中的方法 什么是对象,其实就是一种类型,即引用类型.而对象的值就是引用类型的实例.在ECMAS ...
- python结巴(jieba)分词
python结巴(jieba)分词 一.特点 1.支持三种分词模式: (1)精确模式:试图将句子最精确的切开,适合文本分析. (2)全模式:把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解 ...
- Spring温故而知新 - bean的装配
Spring装配机制 Spring提供了三种主要的装配机制: 1:通过XML进行显示配置 2:通过Java代码显示配置 3:自动化装配 自动化装配 Spring中IOC容器分两个步骤来完成自动化装配: ...