Oracle基础:数据库的事务

一、基本概念:

1.事务(Transaction):事务是并发控制的基本单位;事务,是一个序列操作,要么都执行,要么都不执行;

2.事务的操作过程:1)开始事务setAutoCommit(false),oracle是默认自动开始的;2)设置保存点:savePoint pointaa;3)开始回滚到保存点 rollback to pointaa;4)事务的提交:commit;

3.事务的特征:

1)原子性:事务中所有的操作是一个最小的单元,要么同时成功,要么同时失败;

2)隔离性:允许多个用户并发对同一条数据进行修改,并且不会破坏数据的完整性和结构性;同时并行修改的事务要与并行的事务相互独立,不能互相影响;

3)持久性:事务结束后,事务处理的结果必须得到固话;

4)一致性:只有合法的数据才可以写入到数据库中,否则会回滚到最初的状态;

4.事务的隔离级别:

(一)标准事务隔离级别 1、READ UNCOMMITTED:读未提交
发生脏读 2、READ COMMITTED:读已提交
在trasaction A中读取数据时对记录添加共享锁,但读取结束立即释放。其它transaction B对这个记录的试图修改会一直等待直到A中的读取过程结束,而不需要整个trasaction A的结束。所以,在trasaction A的不同阶段对同一记录的读取结果可能是不同的。
可能发生的问题:不可重复读。 3、REPEATABLE READ:可重复读
对于读出的记录,添加共享锁直到transaction A结束。其它transaction B对这个记录的试图修改会一直等待直到trasaction A结束。
可能发生的问题:当执行一个范围查询时,可能会发生幻读。 4、SERIALIZABLE:序列化
添加范围锁(比如表锁,页锁等),直到transaction A结束。以此阻止其它trasaction B对此范围内的insert,update等操作。

幻读,脏读,不可重复读等问题都不会发生。


(二)事务的问题 1、脏读
当一个事务 A 读取另一个事务B 尚未提交的修改时,产生脏读。 2、不可重复读
同一查询在同一事务 A 中多次进行,由于其他提交事务 B 所做的修改或者删除,每次返回不同的结果集,此时发生非重复读。 3、幻读
同一查询在同一事务 A 中多次进行,由于其他提交事务 B 所做的插入操作,每次返回不同的结果集,此时发生幻读。 (三)Oracle的隔离剂别 1、SQL92标准的 1)READ COMMITTED:读已提交
这是oracle 默认的事务隔离机制
保证不会脏读,单可能出现非重复读和幻读。 2)SERIALIZABLE:序列化
提供了事务看起来像队列一样一个一个顺序执行。
仅仅能看到在本事务开始前由其他事务提交的更改和在本事务中所做的更改。
保证不会出现脏读、不可重复读和幻读
serializable:提供了read-only 事务所提供的读一致性,同时又允许DML(update\insert\delete)操作。

(四)设置Oracle的隔离剂别 1、设置一个事务的隔离级别
set transcation isolation level read committed;
set transcation isolation level serializable;
set transcation read-only; 2、设置整个会话的隔离级别
alter session set isolation_level read committed;
alter session set isolation_level serializable;

参考的博客文章:https://www.2cto.com/database/201506/404495.html







猜你喜欢

转载自blog.csdn.net/zdb292034/article/details/80674615