转载地址:http://blog.csdn.net/applehoney/article/details/2270732
转载地址:http://blog.csdn.net/cxwen78/article/details/6875713
事务隔离级别
SQL92定义了四种事务隔离级别(transaction isolation level),主要是为了在并发事务执行时阻止下列现象发生:
脏读:事务读取了被其他事务写入但未提交的数据。
不可重复读:一个事务再次读取其之前曾经读取过的数据时,发现数据已被其他已提交的事务修改或删除。
幻象读(phantom read):事务按照之前的条件重新查询时,返回的结果集中包含其他已提交事务插入的满足条件的新数据。
提供的四种隔离级别分别不同程度的对这三种现象做了限制:
隔离级别 | 脏读 | 不可重复读 | 幻象读 |
未提交读取 (read uncommitted) | 允许 | 允许 | 允许 |
已提交读取 (read committed) | 不允许 | 允许 | 允许 |
可重复读取 (repeatable read) | 不允许 | 不允许 | 允许 |
串行化 (serializable) | 不允许 | 不允许 | 不允许 |
Oracle支持三种事务隔离级别,分别是
已提交读取,串行化,只读(read only),默认的事务隔离级别是已提交读取。
Oracle事务隔离级别 | 脏读 | 不可重复读 | 幻象读 | 事务内使用 DML操作数据 |
Read committed 已提交读取 | 不允许 | 允许 | 允许 | 允许 |
Serializable 串行化 | 不允许 | 不允许 | 不允许 | 允许 |
Read only 只读 | 不允许 | 不允许 | 不允许 | 不允许 |
Oracle允许在事务开始时使用语句来设定事务的级别,以下三个语句分别设定oracle的三种事务隔离级别:
set transaction isolation level read committed;
set transaction isolation level serializable;
set transaction read only;