3:事务隔离级别:
数据库并发存在的三种问题:
幻象读取:事务T1读取一条指定的where字句所返回的结果集。然后事务T2新插入一条记录,这行记录恰好可以满足该条件,当T1第二次读取的时候就查 询除了这条数据。这个新行就称为“幻象”,因为对于T1来说这行就像是突然出现的。
不可重复读:事务T1读取一行记录,紧接着事务T2修改了T1刚才读取的那行记录。T1再次读取的时候,结果就不同了。该类现象叫做不可重复读。
脏读:事务T1新增了一条数据,事务T2读取更新后的数据。然后T1执行回滚,取消了该操作,T2读取的行就成为了无效的数据(脏数据)。
对于上述三种情况,sql标准定义了以下几种事务隔离级别,按照隔离性级别从低到高:
read uncommitted :读取未提交的数据。 幻影读,不可重复读,脏读都允许。
read committed : 读取提交的数据。脏读不允许,幻影读,不可重复读允许。
repeatable read :允许重复读(重复读是安全的,就是不可重复读)。允许幻影读,但是不允许不可重复读和脏读。
serializable : 序列化读(意味着一个一个来)。不允许幻影读,不可重复读和脏读。
Oracle数据库支持read committed 和serializable两种事务隔离级别,不支持rean uncommitted和repeatable read.
虽然 sql标准定义的默认事务级别是serializable,但是Oracle默认的是read committed.