Oracle数据库事务隔离级别

事务隔离级别:一个事务对数据库的修改与并行的另外一个事务的隔离程度。数据库

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

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

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

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

为了处理这些问题,SQL标准定义了如下几种事务隔离级别查询

READ UNCOMMITTED 幻想读、不可重复读和脏读都容许。

READ COMMITTED 容许幻想读、不可重复读,不容许脏读

REPEATABLE READ 容许幻想读,不容许不可重复读和脏读

SERIALIZABLE 幻想读、不可重复读和脏读都不容许

Oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。因此Oracle不支持脏读

SQL标准所定义的默认事务隔离级别是SERIALIZABLE,可是Oracle 默认使用的是READ COMMITTED

设置隔离级别使用 SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]

相关文章
相关标签/搜索