码迷,mamicode.com
首页 > 其他好文 > 详细

事务的隔离界别

时间:2015-10-21 12:05:27      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

  事务的ACID特性:

  1、Atomicity原子性  事务操作的不可分割性,要么全部执行,要么回滚。

  2、Consistency一致性  数据库在事务处理前后处于的一致性状态。如银行转账,两个账户转账前的状态和转账后的状态必须一致。

  3、Isolation隔离性 同一时刻执行多个事务,一个事务的执行不能被其他事务干扰。

  4、Durability持久性 持久性指一旦成功执行,在系统中产生的所有变化将是永久的。

  事务的隔离级别是事务并发控制的整体解决方案,是综合利用各种类型的锁机制解决并发问题的整体解决方案

  首先了解一下常见的并发问题:

  1、脏读:一个事务可以读到另一个事务未提交的数据,违背了事务的隔离性原则。

  2、不可重复读:同一个事务内,两条相同的查询语句的查询结果不一致。

  3、幻读:屏蔽了对其他用户修改数据的查询,等到提交时发现出错了。

  这三个并发问题的出现都是在前一问题的基础之上发生的,

  比如,脏读问题可以这样理解,客户A从数据库读取数据行到内存并修改,但是还没有提交,此时客户B也要读取这一行,但是这个读取是在内存中读取的客户A未提交的数据

      不可重复读是在解决了脏读的情况下,不再读取未提交的数据,而是从数据库中直接读取已经提交的数据,但是这样会在同一事务中产生一个问题,就是两次查询的结果可能不一致,比如第一次查询在客户端提交前,第二次查询在客户端提交后,结果这两次查询结果不一致。

     幻读问题是在解决了不可重复读问题的前提下,即同一事务中重复查询的结果一致,但是这又会产生新的问题,比如第一次查询是否存在某个用户,假设不存在,此时客户B插入这个用户,此时这个事务的隔离界别是可重复读,那么再次查询这个用户肯定还是不存在,但是此时数据库中已经存在了这个用户,客户A再次插入的话必然会产生duplicate错误。

  为了解决这些并发问题,SQL定义了四种隔离级别:

  read uncommitted(读取未提交的数据)    可能存在  以上三种问题

  read commited 读取提交的数据    解决了脏读问题   但是存在不可重复读和幻读

  repeated read 可重复读      解决了脏读和不可重复读,但是存在幻读现象

  serializable 串行化    解决了脏读,不可重复读和幻读现象,但是发生了锁等待现象,降低了事务间的并发访问性能。

事务的隔离界别

标签:

原文地址:http://www.cnblogs.com/maydow/p/4897072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!