mysql数据库隔离级别
# 原创,转载请留言联系
事务的隔离级别 (由高到低)
1.串行化(serializable):一个事务一个事务的执行
2.可重复读(Repeatable-Read) 可重复读,无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响 (mysql数据库所默认的级别)
3.读已提交(Read Committed) 读取已提交,其他事务提交了对数据的修改后,本事务就能读取到修改后的数据值(大多数数据库默认的隔离级别)
4.读未提交:(Read Uncommitted) 读取未提交,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。
结合实际流程理解一下:

1.串行化 serializable
串行化就是一个事务一个事务的执行。一个事务未执行完毕,另一个事务不能执行。例如上面的购买商品流程。用户A购买商品时,开始一个事务。在这个事务未执行完的时候,用户B不能开始事务。
2.可重复读 Repeatable-Read
可重复读就是一个事务里,无论查找多少遍,都是一样的结果,即使另一个事务对数据进行了更改,查到的结果也是永远一样。例如,用户A开始了事务,查询商品的库存为3。即使用户B这时候开始事务,然后完成了事务,修改了库存,提交了事务。但是用户A的事务在查询商品的库存永远都是3,并不会因为用户B的事务更改了库存而更新数据。它是独立于一个事务的。Mysql默认的隔离级别就是可重复读。
3.读已提交 Read Committed
读已提交是其他事务提交了对数据的修改后,本事务就能读取到修改后的数据值。
例如,用户A开始了事务,查询商品数据是3。这时候,用户B开始了事务,修改了商品库存为1,并且事务提交了。这时候A的事务再查询库存的时候,库存不再是3了,而是1。
很多数据库的默认隔离级别都是读已提交。
4.读未提交 Read Uncommitted
读未提交是其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。例如,用户A开始了事务,查询商品库存是3。这时候用户B开始了事务,先修改了商品库存为1,但是还没有提交。即使这样,用户A的事务再查询商品库存时,查到的库存也是1。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
在用乐观锁的时候,必须要把mysql的隔离级别设置为读已提交。
Ubuntu下的设置方法:
方式一:
1. 使用vi打开mysql配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf2. 在文件的最末尾添加如下配置, 指定mysql数据库的隔离级别为READ-COMMITTED,如下图
# 可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
transaction-isolation=READ-COMMITTED
3. 在终端中重启mysql服务
sudo service mysql restart
方式二:
1. 进入mysql终端
2. 查看当前事务隔离级别
select @@global.tx_isolation;3. 设置隔离级别,可选的参数READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
mysql数据库隔离级别的更多相关文章
- mysql数据库隔离级别及其原理、Spring的7种事物传播行为
一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节.事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有 ...
- mysql 数据库隔离级别
select @@tx_isolation; 4种隔离级别 1.read uncommitted 2.read committed 3.repeatable read(MySQL默认隔离级别) 4. ...
- 数据库隔离级别(mysql+Spring)与性能分析
数据库隔离级别与Spring配置事务的联系及性能影响,以下是个人理解,如果有瑕疵请及时指正. 这里以mysql为例,先明确以下几个问题: 一.一般项目如果不自己配置事务的话,一般默认的是au ...
- Mysql加锁过程详解(6)-数据库隔离级别(1)
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- Mysql加锁过程详解(6)-数据库隔离级别(2)-通过例子理解事务的4种隔离级别
Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...
- MySql的隔离级别和锁的关系
一.事务的4个基本特征 Atomic(原子性): 事务中包括的操作被看做一个逻辑单元.这个逻辑单元中的操作要 么所有成功.要么所有失败. Consistency(一致性): 仅仅有合法的数据能 ...
- mysql事务隔离级别详解和实战
A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据 但是 在A事务中查询的话 查到的都是操作之后的数据 没有提交的数据只有自己看得到,并没有update到数据库. 查看InnoD ...
- Mysql得隔离级别
一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...
- Mysql的隔离级别
一.首先什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事 ...
随机推荐
- Android APP性能优化(最新总结)
导语 安卓大军浩浩荡荡,发展已近十个年头,技术优化日异月新,如今Android 8.0 Oreo 都发布了,Android系统性能已经非常流畅了.但是,到了各大厂商手里,改源码自定系统,使得And ...
- wildcard ,notdir ,patsubst ,obj=$(dir:%.c=%.o)
Makefile中wildcard的介绍 在Makefile规则中,通配符会被自动展开.但在变量的定义和函数引用时,通配符将失效.这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的 ...
- BZOJ1898: [Zjoi2005]Swamp 沼泽鳄鱼(矩阵乘法)
1898: [Zjoi2005]Swamp 沼泽鳄鱼 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 Description 潘塔 ...
- 洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
P3065 [USACO12DEC]第一!First! 题目链接:https://www.luogu.org/problemnew/show/P3065 题目描述 Bessie一直在研究字符串.她发现 ...
- maven的tomcat插件如何进行debug调试
利用maven来部署工程时,一般采用的是tomcat插件,使项目在tomcat上面运行,那么这个debug调试是如何进行呢? 我们在调试的时候问题: 会提示找不到资源,那么如何进行修改呢,方法两个: ...
- HDU3666 差分约束
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 51Nod 1080
#include "bits/stdc++.h" using namespace std; #define LL long long #define INF 0x3f3f3f3f3 ...
- HUST 1103 校赛 邻接表-拓扑排序
Description N students were invited to attend a party, every student has some friends, only if someo ...
- 【设计模式】 模式PK:包装模式群PK
1.概述 我们讲了这么多的设计模式,大家有没有发觉在很多的模式中有些角色是不干活的?它们只是充当黔首作用,你有问题,找我,但我不处理,我让其他人处理.最典型的就是代理模式了,代理角色接收请求然后传递到 ...
- mvc Dapper_Report_Down_ExcelFile
一.基于Aspose.Cells.Dapper导出Excel Dapper的Query返回要不是对象的IEnumerable,要不是Dynamic的IEnumerable,都不适合不用反射就能够动态获 ...