事务的四大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事务隔离级别了解一下?的更多相关文章

  1. [51CTO]新说MySQL事务隔离级别!

    新说MySQL事务隔离级别! 事务隔离级别这个问题,无论是校招还是社招,面试官都爱问!然而目前网上很多文章,说句实在话啊,我看了后我都怀疑作者弄懂没!本文所讲大部分内容,皆有官网作为佐证,因此对本文内 ...

  2. 查询mysql事务隔离级别

    查询mysql事务隔离级别 查询mysql事务隔离级别 分类: DB2011-11-26 13:12 2517人阅读 评论(0) 收藏 举报 mysqlsessionjava   1.查看当前会话隔离 ...

  3. MySQL事务隔离级别测试实例

    https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...

  4. Mysql事务-隔离级别

    MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...

  5. MySQL事务隔离级别 解决并发问题

    MySQL事务隔离级别 1. 脏读: 骗钱的手段, 两个窗口或线程分别调用数据库转账表,转账后未提交,对方查看到账后,rollback,实际钱没转. 演示方法: mysql默认的事务隔离级别为repe ...

  6. mysql事务隔离级别、脏读、幻读

    Mysql事务隔离级别本身很重要,再加上可能是因为各大公司面试必问的缘故,在博客中出现的概率非常高,但不幸的是,中国的技术博客要么是转载,要么是照抄,质量参差不齐,好多结论都是错的,对于心怀好奇之心想 ...

  7. mysql事务隔离级别与设置

    mysql数据库,当且仅当引擎是InnoDB,才支持事务: 1.隔离级别 事务的隔离级别分为:未提交读(read uncommitted).已提交读(read committed).可重复读(repe ...

  8. MySQL事务隔离级别(二)

    搞清楚MySQL事务隔离级别 首先创建一个表 account.创建表的过程略过(由于 InnoDB 存储引擎支持事务,所以将表的存储引擎设置为 InnoDB).表的结构如下: 为了说明问题,我们打开两 ...

  9. MySQL事务隔离级别(一)

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

  10. 面试突击61:说一下MySQL事务隔离级别?

    MySQL 事务隔离级别是为了解决并发事务互相干扰的问题的,MySQL 事务隔离级别总共有以下 4 种: READ UNCOMMITTED:读未提交. READ COMMITTED:读已提交. REP ...

随机推荐

  1. UWP开发学习笔记3

    获取可视化状态列表 private void Button_Click(object sender, RoutedEventArgs e) { //获取CheckBox控件可视化树中的子元素数量 in ...

  2. C#中??操作符的使用

    为了实现Nullable数据类型转换成non-Nullable型数据,就有了一个这样的操作符”??(两个问号)“,双问号操作符意思是取所赋值??左边的,如果左边为null,取所赋值??右边的, 比如i ...

  3. 正则表达式-Csharp

    原文:正则表达式-Csharp 学习笔记:正则表达式 一. 正则表达式 正则表达式(Regex)是用来进行文本处理的技术,是语言无关的,在几乎所有语言中都有实现. 一个正则表达式就是由普通的字符及特殊 ...

  4. Android零基础入门第43节:ListView优化和列表首尾使用

    原文:Android零基础入门第43节:ListView优化和列表首尾使用 前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪 ...

  5. 让您的应用兼容 Android Oreo

    不知不觉Android Oreo已经发布几个月时间了,你的应用开始使用最新平台了吗?在应用迁移过程中是否遇到了一些棘手问题?你的Android应用兼容Oreo如何呢? 我们应该都知道,每一次重大升级, ...

  6. .NET Core整合log4net以及全局异常捕获实现

    在使用log4net之前先安装log4net.这里操作很简单,通过nuget下载并安装log4net很方便.如下图. log4net配置 <?xml version="1.0" ...

  7. Qt for android触摸手势事件QGestureEvent

    在触摸设备上可以使用Qt的手势事件 要激活手势事件,需要执行以下操作: 第一步,为QWidget控件注册手势事件 QList<Qt::GestureType> gestures; gest ...

  8. VCL比MFC好在哪里

    作者:刘国华链接:https://www.zhihu.com/question/35218485/answer/118472021来源:知乎著作权归作者所有,转载请联系作者获得授权. 从使用感受而言, ...

  9. delphi 读写文本文件(函数比较全)

    需要两个按钮和两个Richedit控件,采用默认名称即可. procedure TForm1.Button1Click(Sender: TObject);  //写文件 var wText: Text ...

  10. 自己动手写jQuery插件---Tip(提示框)

    对jQuery相信很多同学和我一样平时都是拿来主义,没办法,要怪只能怪jQuery太火了,各种插件基本能满足平时的要求.但是这毕竟不是长久之道,古人云:“授之以鱼,不如授之以渔”. 为了方便之前没有接 ...