`

理解数据库事务隔离级别以及脏读, 不可重复读, 幻读

阅读更多

转:http://blog.csdn.net/sunxing007/article/details/6427290

数据库事务的4个特性:
原子性(atomic):
 都成功或者都失败;
一致性(consistency):事务操作之后,数据库所处的状态和业务规则是一致的;比如a,b账户相互转账之后,总金额不变;
隔离性(isolation):操作中的事务不相互影响;
持久性(durability):事务提交后被持久化到数据库.

脏读,不可重复读, 幻读
幻读phantom read:
事务1读取记录时事务2增加了记录并提交,事务1再次读取时可以看到事务2新增的记录;
不可重复读unrepeatable read:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录;
脏读dirty read:事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在T2读取无效。

事务隔离级别描述:
READ UNCOMMITTED:幻读,不可重复读和脏读均允许;
READ COMMITTED:允许幻读和不可重复读,但不允许脏读;
REPEATABLE READ:允许幻读,但不允许不可重复读和脏读;
SERIALIZABLE:幻读,不可重复读和脏读都不允许; 
ORACLE默认的是 READ COMMITTED。

如何感性理解这些“深奥”的术语?个人认为, 作为一个java程序员,这些字眼比较唬人。

首先, 隔离级别描述了事务被隔离的程度。可以简单的想象一下, 一个人因为某种原因(比如国家安全)需要被隔离,则涉及安全的机密程度越高, 需要个隔离级别就越高,他与外界的沟通渠道就越少。

对于数据库而言, 每个事务都要占用一些资源,比如对表/数据享有的操作权限,事务的隔离级别描述了事务对资源享用的程度。

如果数据库的隔离级别为REAE_UNCOMMITTED, 则其他线程可以看到未提交的数据, 因此就出现脏读;

如果数据库隔离级别设为READ_COMMITTED,即没提交的数据别人是看不见的,就避免了脏读;但是,正在读取的数据只获得了读取锁,读完之后就解锁,不管当前事务有没有结束,这样就容许其他事务修改本事务正在读取的数据。导致不可重复读。

REPEATABLE READ因为对正在操作的数据加锁,并且只有等到事务结束才放开锁, 则可以避免不可重复读;
REPEATABLE READ只能保证正在被本事务操作的数据不被其他事务修改,却无法保证有其他事务提交新的数据。 则有可能线程1在操作表T1的时候(特别是统计性的事务),其他线程仍然可以提交新数据到表T1,这样会导致线程1两次统计的结果不一致,就像发生幻觉一样。

SERIALIZABLE因为获得范围锁,且事务是一个接着一个串行执行,则保证了不会发生幻读。
由此可见,隔离级别越高,受其他事物干扰越少,并发性能越差。

设置语法

Oracle:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE|READ COMMITTED|READ UNCOMMITTED|REPEATABLE READ;

Sybase:

sql opreation at isolation read committed

分享到:
评论

相关推荐

    MySQL数据库事务隔离级别详解

    数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为 Read uncommitted:允许脏读。 Read committed: 防止脏读,最常用的隔离级别,并且是大多数数据库的默认隔离级别。 Repeatable read:可以防止脏...

    数据库事务的四大特征以及隔离级别

    1. 事务的四大特征(ACID) 原子性(Atomicity):事务包含所有操作要么全部成功,要么全部回滚。 一致性(Consistency):一个事务执行之前和...Serializable(串行化):可避免脏读、不可重复读、幻读的发生。 Rep

    事务隔离级别和脏读的快速入门

    仅从ACID或非ACID角度考虑问题是不够的,你应知道你的数据库支持何种事务隔离...在本文中,我们将解释什么是事务隔离级别和脏读,并给出一些广受欢迎的数据库是如何实现它们的。ANSISQL给出了四种标准的事务隔离级别:

    oracle 数据库隔离级别学习

    oracle 事务隔离级别 事务不同引发的状况: 脏读(Dirty reads) 一个事务读取另一个事务尚未提交的修改时,产生脏读 很多数据库允许脏读以避免排它锁的竞争。 不可重复读(Nonrepeatable reads) 同一查询在同一事务中...

    数据库的脏读、不可重复读、幻读

    数据库的脏读、不可重复读、幻读都和事务的隔离性有关。所以先了解一下事务的4大特性。  事务的4大特性(ACID):  1、原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么...

    数据库锁(行锁,表锁,共享锁,排他锁)脏读、不可重复读、幻读和事物隔离级别

    数据库锁(行锁,表锁,共享锁,排他锁) 行锁 我们知道mysql的Innodb引擎是支持行锁的,与Oracle不同,mysql的行锁是通过索引加载的,即行锁是加载索引响应的行上的,要是对应的SQL语句没有索引,则会走表锁。 行锁...

    数据库事务及锁机制面试题

    脏读、不可重读度、幻读,其实都是数据库的一致性问题,必须由一定的事务隔离机制来解决。性能高和事务完全隔离性无法同时满足,DB提供了4项事务隔离级别来权衡,需要用户根据自身业务来选择合适的隔离级别。隔离...

    ORACLE数据库事务隔离级别介绍

    2、不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。 3、脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了...

    数据库事务的隔离级别

    隔离级别都与问题相对应,数据库操作常见的问题:  1 脏读: 一个事务可以读取另一个事务未提交的数据  2 不可重复读: 一个事务连续两次执行某个...  数据库事务隔离级别  1 read uncommitted 脏读的那个级别

    常见的数据库事务隔离级别

    也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。 一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。 隔离性...

    通过实例分析MySQL中的四种事务隔离级别

    前言 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。数据库事务的隔离级别有4个,下面话不多说了,来一起看看...在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻读。 串行读(Seria

    MySQL可重复读级别能够解决幻读吗

    关于脏读和不可重复读在相应的隔离级别下都很容易的复现了。但是对于幻读,我发现在可重复读的隔离级别下没有出现,当时想到难道是MySQL对幻读做了什么处理? 测试: 创建一张测试用的表dept: CREATE TABLE `dept`...

    msyql锁、事务隔离级别各种场景验证测试.rar

    我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能 就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题,为了...

    java-数据库系统原理.docx

    并发访问问题 事务隔离级别 丢失修改 MySQL 所有事务隔离级别在数据库层面上均可避免 脏读 READ-COMMITTED 事务隔离级别以上可避免 不可重复读 REPEATABLE-READ 事务隔离级别以上可避免 幻读 SERIALIZABLE 事务隔离...

    一文彻底读懂PostgreSQL事务隔离级别

    不可重复读:一个事务重新读取之前读取过的数据,发现该数据已经被另一个事务(在初始读之后提交)修改。 幻读:一个事务重新执行一个返回符合一个搜索条件的行集合的查询, 发现满足条件的行集合因为另一个最近提交...

    基于框架的Web开发-spring事务入门一个转账的例子.doc

    可重复读:避免脏读和不可重复读.但是虚读有可能发生. 串行化的:避免以上所有读问题. 2 一个转账的例子 例子模拟两个账户之间的转账操作,基本业务逻辑如下: A账户,余额1000元 B账户,余额1000元 Transfer(A账户,...

    数据库事务

     ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。  ③ Read committed (读已提交):可避免脏读的发生。  ④ Read ...

    SQL Server事务的隔离级别

    这篇数据库教程SQLServer 事务的隔离级别,教程操作方法:  数据库是要被广大客户所共享访问的,那么在数据库操作过程中很可能出现以下几种不确定情况。  更新丢失(Lost update)  两个事务都同时更新一行数据...

Global site tag (gtag.js) - Google Analytics