事务的四大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. XF相对布局

    using System; using Xamarin.Forms; using Xamarin.Forms.Xaml; [assembly: XamlCompilation (XamlCompila ...

  2. github中README.md文件写法解析,git指令速查表

    http://blog.csdn.net/u012234115/article/details/41778701 http://blog.csdn.net/u012234115/article/det ...

  3. 浏览器禁用cookie后php如何保持session会话-use_trans_sid机制

    原文:浏览器禁用cookie后php如何保持session会话-use_trans_sid机制 为防止浏览器禁用cookie导致服务器会话无法保持,php开发了一个机制,该机制开启后,浏览器发起请求后 ...

  4. 零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)

    原文:零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下) 你可以把Clip想成是一个遮罩,运用遮罩达到我们想要的效果 所以在这里我们把文字 ...

  5. BooleanToColorConverter

    public class BooleanToColorConverter : IValueConverter { public object Convert(object value, Type ta ...

  6. 邮件带附件和html格式

    1. 发送有附件的邮件需要添加一个附件类Attachment,这个附件可以为文件和图片: Attachment attach = new Attachment(“文件路径”");//文件 A ...

  7. 访问类的私有属性(RTTI和模仿类2种方法)

    如何访问类的私有属性? 下面以 TPathData 为例,它有一个私有属性 PathData,储存了每一个曲线点,但一般无法修改它,需要利用下面方法,才能访问修改(若有更好的方法,歡迎分享): 一.利 ...

  8. 用 eric6 与 PyQt5 实现python的极速GUI编程(35篇PyQT和200多篇Python)

    [题记] 我是一个菜鸟,这个系列是我的学习笔记. PyQt5 出来有一段时间了, PyQt5 较之 PyQt4 有一些变化,而网上流传的几乎都是 PyQt4 的教程,照搬的话大多会出错. eric6 ...

  9. _stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l 比较函数

    https://msdn.microsoft.com/en-us/library/k59z8dwe.aspx

  10. KmdKit4D 0.01正式版发布了(0.02版已放出)(Delphi做驱动)

    此版本较0.01预览版已经有了脱胎换骨的变化,主要表现在以下几个方面:    1.对程序的结构进行了调整,将原来的ntutils.dcu分成fcall.dcu.halfcall.dcu和macros. ...