日期:2014-05-16  浏览次数:20514 次

ORACLE的隔离级别

隔离级别(isolation level

两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:

1、幻想读 :事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。

2、不可重复读取 :事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。

3、脏读 :事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。

?

l???????? 隔离级别定义了事务与事务之间的隔离程度。

l???????? 隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。

l???????? ANSI/ISO SQL92 标准定义了一些数据库操作的隔离级别:

l????????? 未提交读(read uncommitted

l????????? 提交读(read committed

l????????? 重复读(repeatable read

l????????? 序列化(serializable

l???????? 通过一些现象,可以反映出隔离级别的效果。这些现象有:

l????????? 更新丢失(lost update ):当系统允许两个事务同时更新同一数据是,发生更新丢失。

l????????? 脏读(dirty read ):当一个事务读取另一个事务尚未提交的修改时,产生脏读。

l????????? 非重复读(nonrepeatable read ):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。(A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data.? )

l????????? 幻像(phantom read ):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。(A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition.? )

l???????? 下面是隔离级别及其对应的可能出现或不可能出现的现象

友情链接: 爱易网 云虚拟主机技术 云服务器技术 程序设计技术 开发网站 APP开发教程
Copyright © 2013-2024 爱易网页 当前在线:294人  网站在9时11分10秒内访问总人数:118542人 当前 23.01%  粤ICP备18100884号-2

?

Dirty Read?

NonRepeatable Read?

Phantom Read?

Read uncommitted

Possible

Possible

Possible

Read committed

Not possible

Possible

Possible