事务隔离级别(Transaction isolation level)是一个事务对数据库的修改与并行的另一个事务的隔离程度。
幻像读取(phantom read)事务T1读取一条指定的WHERE子句所返回的结果集。然后事务T2新插入一行记录,这行记录恰好可以满足T1所使用的查询条件中的WHERE 子句的条件。然后T1又使用相同的查询再次对表进行检索,但是此时却看到了事务T2刚才插入的新行。这个新行就称为“幻像”,因为对T1来说这一行就像突 然出现的一样。
不可重复读取(nonrepeatable read)事务T1读取一行记录,紧接着事务T2修改了T1刚才读取的那一行记录。然后T1又再次读取这行记录,发现与刚才读取的结果不同。这就称为“不可重复”读,因为T1原来读取的那行记录已经发生了变化。
脏读(dirty read)事务T1更新了一行记录的内容,但是并没有提交所做的修改。事务T2读取更新后的行,然后T1执行回滚操作,取消了刚才所做的修改。现在T2所读取的行就无效了。
为解决这些问题,SQL标准定义了几种事务隔离级别,从级别低到高依次为:
READ UNCOMMITTED 幻像读、不可重复读和脏读都允许。
READ COMMITTED 允许幻像读、不可重复读,但不允许脏读。
REPEATABLE READ 允许幻像读,但不允许不可重复读和脏读。
SERIALIZABLE 幻像读、不可重复读和脏读都不允许。
ORACLE数据库支持 READ COMMITTED 和 SERIALIZABLE,不支持 READ UNCOMMITTED 和 REPEATABLE READ。