事务的隔离级别与Oracle对事务的支持操作
事务隔离级别
一、脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。在Oracle中没有脏读的问题。
二、不可重复读(nonrepeatable read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时产生不可重复读。
三、幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻读。
不可重复读与幻读的区别:
1、不可重复读指的是对于“同一条”数据的查询操作 a ->b
幻读对于“多条数据”的查询操作,数据量数: 20条 -> 18条
2、不可重复读:update
幻读:insert或delete
四种隔离级别的程度逐次递进,解决并发效果越来越稳定,但是性能越来越低。
ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别(这是国际标准化组织定义的一个标准而以,不同的数据库在实现时有所不同)。
隔离级别 |
脏读 |
不可重复读 |
幻读 |
读未提交(Read uncommitted) |
√ |
√ |
√ |
读已提交(Read committed) |
× |
√ |
√ |
可重复读(Repeatable read) |
× |
× |
√ |
可串行化(Serializable) |
× |
× |
× |
Oracle的事务隔离级别
oracle提供了sql92标准中的read committed(读已提交)和serializable(可串行化),同时提供了非sql92标准的read-only(读一致性),默认是read committed(读已提交)
oracle的事务隔离设置
设置一个事务的隔离级别
set transaction isolation level read committed;(oracle默认的事务隔离级别“读已提交”)
set transaction isolation level serializable;(设置事务隔离级别为“可串行化”)
set transaction read only;(设置事务隔离级别为“读一致性”)
参考:oracle中事务处理--事务隔离级别 - 罗小川的博客 - 博客园 (cnblogs.com)