关于数据库的ACID特性已经有很多的介绍,这里再重新归纳总结一下:
 
A(atomicity)原子性:
  即事务要么全部做完,要么全部不做,不会出现只做一部分的情形,如A给B转帐,不会出现A的钱少了,B的钱却没有增加的情况
C(consistency)一致性:
  指的是事务从一个状态到另一个状态是一致的,如A减少了100,B不可能只增加30。
I(isolation)隔离性:
  即一个事务在没有完成数据的提交修改时,对其它事务是不可见的。当然这里有个隔离级别的概念,在不同隔离级别下,这里会有不同的表现形式
D(durability)持久性:
  一旦事务提交,则所做修改就会被永久保存到数据库中。
 
 
在说隔离级别之前,我们先说如下几个概念:
脏读:
  一个事务对数据进行增删改,但并没有提交,但另一事务却能读到未提交的数据
不可重复读:
  一事务对数据进行了更新或删除操作,另一事务两次查询的数据不一致
幻读:
  一事务对数据进行了新增操作,另一事务两次查询结果不一致。
 
我们看到不可重复读与幻读好像好类似,但其实它们是有很大的不同,不可重复读主要体现在update与delete,而幻读主要体现在insert,从实现层面上讲,要解决不可重复读,我们只需要对查询的数据进行加锁就可以实现,此时update与delete这些行都会阻塞等待,但是insert依旧可以,避免不了幻读,而要解决幻读,必须对其行与行之前也加锁,在mysql中,是通过next key lock(行锁+gap lock)来实现的。
 
 
隔离级别:
read uncommited未提交读:
  隔离级别为0,会有脏读,不可重复读,幻读
 
read commit提交读:
  隔离级别为1,不会有脏读,但有不可重复读,幻读
 
repeatable read可重复读:
  隔离级别为2,不会有脏读,不可重复读,但依旧会有幻读。但为什么说mysql中的repeatable read解决了幻读?本来是会有幻读的,但是它采用了next key lock加上for update来避免,InnoDB提供了这样一种机制,通过加锁去查询可以得到最新的数据,如两个事务同时开启,A事务插入了一条数据,并提交,B事务去查select * from t,此时B是不能查询到A事务提交的数据的,但是加多一个for update,即select * from t for update,就能查找刚刚A事务插入的数据。所以我们才说mysql在repeatable read隔离级别下可以避免幻读的原因,记得加for update。
 
serializable可序列化:
  隔离级别为3,不会有脏读,不可重复读,幻读。但效率最低,并发性能最差,一般情况下不会使用。
 
 
 
 
 
 

mysql ACID与四种隔离级别归纳总结的更多相关文章

  1. 数据库操作事物的四大特性以及MySQL数据库的四种隔离级别

    1 .事物操作数据库的四大特性(ACID) 1.原子性 (Atomicity) 原子性:就是事物的所包含的所有操作,要么全部成功,要么全部失败回滚. 2.一致性 (Consistency) 一致性:简 ...

  2. MySQL事务的四种隔离级别

    事务的基本要素: 原子性(atomicity):事务开始后的全部操作, 要么全部执行成功,如果中间出现错误,事务回滚到事务开始前的状态. 一致性(Consistency):事务开始后,数据库的完整性约 ...

  3. MySQL 四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  4. MySql四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  5. 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!

    阅读本文大概需要 5.6 分钟. 来源:网络 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操 ...

  6. MySQL 四种隔离级别详解,看完吊打面试官

    转发链接:https://zhuanlan.zhihu.com/p/76743929 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就 ...

  7. 数据库事务 ACID属性、数据库并发问题和四种隔离级别

    数据库事务 ACID属性.数据库并发问题和四种隔离级别 数据库事务 数据库事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态 一组逻辑操作单元:一个或多个DML操作 事务处理原则 保证所有事务都 ...

  8. MySQL面试题--常见的四种隔离级别

    什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做. 事务的结束有 ...

  9. 【转载】mysql 四种隔离级别分析

    sql标准中,有四种隔离级别,各个离级别都有各自的规则,隔离级别越低,允许并发越大,消耗的资源越少,但是越不安全,下面就mysql数据库来分别介绍一下(每个存储引擎实施的隔离级别会有稍微的不同)mys ...

随机推荐

  1. 基础002_V7-CLB

    一.综述 参考ug474.pdf: 7系列中,一个CLB包含两个slice: 每个CLB的资源: CLB可配置的主要功能: 二.主要功能 LUT是基本单元,例如选择器assign muxout =  ...

  2. Atitit 个人信息数据文档知识分类

    Atitit 个人信息数据文档知识分类 1.1. 知识分类法,参照图书分类法 1 2. Attilax知识分类 2 2.1. 公共文档(一般技术资料,通过标题可以网上搜索到的) 2 2.2. sum ...

  3. 【Unity】8.5 扩展编辑器

    分类:Unity.C#.VS2015 创建日期:2016-04-27 一.简介 可以通过编辑器窗口 (Editor Windows) 创建自己在 Unity 中的自定义设计工具.来自EditorWin ...

  4. 【Unity】第7章 输入控制

    分类:Unity.C#.VS2015 创建日期:2016-04-21 一.简介 Unity提供了-个非常易用和强大的用于处理输入信息的类:Input,利用该类可以处理鼠标.键盘.摇杆/方向盘/手柄等游 ...

  5. Status bar and navigation bar appear over my view's bounds in iOS 7

    转自:http://stackoverflow.com/questions/17074365/status-bar-and-navigation-bar-appear-over-my-views-bo ...

  6. ubuntu svn rabbitvcs 安装

    参考链接:http://blog.csdn.net/weng_xianhu/article/details/10079179 32位系统完全按照上面链接安装没有问题,但是如果是64位系统,第六步下载资 ...

  7. C++ Primer笔记 容器和算法(2)

    erase 删除后  返回的是删除元素的后一个迭代器位置 int main() { //怎样正确的删除全部元素 循环 int a[]={1,2,3,4,5,6,7,8,9}; vector<in ...

  8. sql左右连接测试

    with a as (select 1 as id, 'name1'as nameunionselect 2 as id, 'name2'as nameunionselect 3 as id, 'na ...

  9. Spark Streaming的接收KAFKA的数据

    https://github.com/lw-lin/CoolplaySpark/blob/master/Spark%20Streaming%20%E6%BA%90%E7%A0%81%E8%A7%A3% ...

  10. 如何高效的学习 TensorFlow 代码? 以及TensorFlow相关的论文

    https://www.zhihu.com/question/41667903 源码分析 http://www.cnblogs.com/yao62995/p/5773578.html 如何贡献Tens ...