在?MySQL事务隔离级别了解一下?
事务的四大ACID 属性:Atomicity 原子性、Consistency 一致性、Isolation 隔离性、Durability 持久性。
原子性: 事务是最小的执行单位不可分割,强调事务的不可分割
持久性: 事务执行前后,数据的完整性保持一致。
一致性: 一旦事务执行结束,数据就保存到数据库。
隔离性: 一个事务执行的前后不应该受到其他事务的干扰。
MySQL的事务隔离级别有四种:未提交读、已提交读、可重复读和串行化。
未提交读: 事务A可以读取到事务B还未提交的数据。比如事务B将小明的账户余额从100改到110,事务B还没提交,在这个隔离级别下事务A就读取到的数据就是110。如果说事务B回滚了,那数据库里小明的账户余额又变成100了,可是事务A返回的数据却是110。这就造成了脏读。
已提交读: 事务A读取到数据是事务B提交后的数据,即一个事务提交后,其变更才会被另一个事务读取到。比如事务B将小明的账户余额从100改到110,事务B还没提交的时候,事务A读取到的数据仍然是100。因为在这个隔离级别下一个事务只能读取到另一个事务修改后且提交事务后的数据。但是这种情况会造成一个问题就是,事务A在事务B隐式提交数据后读取到的数据是110,这是没问题的,但是在事务A还没提交前,事务B又将小明的账户余额改为120并隐式提交,然后事务A再来读取的时候就读到了120,所以事务A的两次读取结果不一致。这就造成了不可重复读。
可重复读: 事务A只能读到事务B修改的已提交了事务的数据,但是第一次读取的数据,即使别的事务修改了这个值,这个事务再读取这条数据的时候还是和第一次获取的一样,不会随着别的事务的修改而改变。这和已提交读的区别就在于,它重复读取的值是不变的。所以叫可重复读,很贴切的名字。拿刚才的例子就是,事务A在自己的事务里多次读取小明的账户余额时,如果第一次读取的是100,那么不管在这之后事务B对它进行如何的修改,对于事务A来说多次读取的结果都是100。可重复读解决了不可重复读(听起来像是废话),但是存在幻读的情况。
幻读:当事务A查询账户余额=100的客户个数时,假如返回的是1万,这时事务B将小明的账户余额由110改为100并提交事务,事务A再次查询账户余额=100的客户个数时返回的统计个数变成了1万零1。这就是幻读。
幻读和不可重复读有区别。不可重复读侧重点在于读取同一条数据,数据被修改,如读小明的账户余额;幻读的侧重点在于新增或者删除 (数据条数变化),同样的条件两次查询记录数不一样。
串行化: 上面三个隔离级别对同一条记录的读和写都可以并发进行,但是串行化的隔离级别下就只能进行读-读并发。只要有一个事务操作一条记录的写,那么其他事务要读这条记录的事务都得等着。例如,事务B修改小明的账户还未提交前事务A来读,那么事务A就只能等着事务B提交之后才能读。
串行化的隔离级别一半没人用,因为性能比较低,常用的是已提交读和可重复读。
大多数数据库采用已提交读,MySQ的默认隔离级别是:可重复读。可以通过 select @@global.tx_isolation;来查看当前隔离级别。
✘不会造成 , ✔可能造成
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
未提交度 | ✔ | ✔ | ✔ |
已提交读 | ✘ | ✔ | ✔ |
可重复读 | ✘ | ✘ | ✔ |
串行化 | ✘ | ✘ | ✘ |
在?MySQL事务隔离级别了解一下?的更多相关文章
- [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事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...
- mysql事务隔离级别与设置
mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...
- MySQL事务隔离级别(二)
搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...
- MySQL事务隔离级别(一)
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...
- 面试突击61:说一下MySQL事务隔离级别?
MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种: READ UNCOMMITTED:读未提交. READ COMMITTED:读已提交. REP ...
随机推荐
- Linux技术学习路线图
- 【转载】MySQL双主双从高可用集群架构
双浮动VIP 原文地址:http://www.linuxcache.com/archives/2907 转载请注明原文地址.
- C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享
原文:C# 桌面软件开发-深入学习 [1]- AY-C#人爱学不学-aaronyang技术分享 曾经我做office,不想依赖别人dll,就使用了 Type.GetTypeFromProgID 可以根 ...
- 1. linux系统简介
一.Linux是什么 linux位于系统调用和内核的那两层,直观上来看,我们使用的操作系统还包含一些在其上运行的应用程序,包含文本编译器,浏览器,电子邮件. 二.Linux与windows的区别 1. ...
- Win10《芒果TV》更新v3.8.50勇敢版:新增短信和扫码登录
勇敢,是心中最初的信仰,实景科幻实验节目<勇敢的世界>,重装上阵对抗升级,<中餐厅2>皇阿玛圣驾亲临,坐镇中国味道.Win10版<芒果TV>全平台同步更新勇敢版v3 ...
- 通过Chrome扩展来批量复制知乎好友
1.初始化文件 Chrome 官方扩展教程地址 新建一个文件夹 zhi-follow 下图中 1 部分为 默认的图标3种尺寸 会显示在 Chrome 中 2. 定义按钮样式 页面上会有 ...
- mysql多对一、多对多查询实践
最近做的功能涉及这方面,算是练了一下. 首先多对一部分较简单.多的那一方表,多设置一个字段是少的那一方的id(主键). 具体查询时候关联查询即可. 可设置外键进行级联操作. 具体以后做到这个功能再更新 ...
- HTTP RFC7230
https://tools.ietf.org/html/rfc7230 https://tools.ietf.org/html/rfc7231#section-4
- Android零基础入门第83节:Activity间数据传递方法汇总
在Activity间传递的数据一般比较简单,但是有时候实际开发中也会传一些比较复杂的数据,本节一起来学习更多Activity间数据的传递. 一.常用数据类型 在前面几节我们只学习了一些常用类型的数据传 ...
- 机器学习Machine Learning(ML)
什么是机器学习 定义 对于某个任务T和表现的衡量P,当计算机程序在该任务T的表现上,经过P的衡量,随着经验E而增长,称计算机能够通过经验E来学习该任务.(Tom Mitchell) 举例而言,在跳棋游 ...