关于数据库的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,不会有脏读,不可重复读,幻读。但效率最低,并发性能最差,一般情况下不会使用。
 
 
 
 
 
 

最新文章

  1. linux安装jdk和scala
  2. 关于TortoiseGit使用的心得
  3. 使用java连接sqlserver2008 R2/sqlserver2008
  4. webstrom快捷键速查
  5. [转]oracle审计详解
  6. Java程序编译和运行的过程【转】
  7. 有三个线程T1 T2 T3,如何保证他们按顺序执行-转载
  8. [转]微软联合CSDN英雄在线编程大赛
  9. lua的三目运算符
  10. js IDE WebStorm 注册码
  11. (菜鸟要飞系列)三,基于Asp.Net MVC5的后台管理系统(用户的增删改查功能)
  12. HDU 3664 Permutation Counting (DP)
  13. Meta标签中的format-detection属性及含义
  14. linux之vim编辑器
  15. 【USACO 2.1.5】海明码
  16. android之Fragment(官网资料翻译)
  17. 学SpringMVC
  18. 解决IOS下不支持fixed的问题
  19. God 1.1.1 多线程之内存可见性
  20. 坑:JavaScript 中 操作符“==” 和“===” 的区别

热门文章

  1. Java – Generate random integers in a rangejava获取某个范围内的一个随机数
  2. 带你开始进入NPM的世界之NPM包的开发
  3. mongodb 数据库操作--备份 还原 导出 导入(转)
  4. Eclipse 快速提取一个方法 (重构)
  5. java字符串的遍历以及字符串中各类字符的统计
  6. MySQL的DDL语句、DML语句与DCL语句
  7. C++生成斐波拉其数列
  8. centos 7 忘记密码
  9. android---笔记 AppContext extends Application
  10. [Windows Azure] How to Scale a SQL Database Solution