Oracle基础(七):数据库事务
- 可以设置多个保存点
- 一旦回退以后,不能再次回退。
- Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。
- Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。
- Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
- Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。
- 开始事物:BEGIN TRANSACTION
- 提交事物:COMMIT TRANSACTION
- 回滚事务:ROLLBACK TRANSACTION
- 发生脏读
- 在trasaction A中读取数据时对记录添加共享锁,但读取结束立即释放。其它transaction B对这个记录的试图修改会一直等待直到A中的读取过程结束,而不需要整个trasaction A的结束。所以,在trasaction A的不同阶段对同一记录的读取结果可能是不同的。
- 可能发生的问题:不可重复读。
- 对于读出的记录,添加共享锁直到transaction A结束。其它transaction B对这个记录的试图修改会一直等待直到trasaction A结束。
- 可能发生的问题:当执行一个范围查询时,可能会发生幻读。
- 添加范围锁(比如表锁,页锁等),直到transaction A结束。以此阻止其它trasaction B对此范围内的insert,update等操作。
- 幻读,脏读,不可重复读等问题都不会发生。
- 当一个事务 A 读取另一个事务B 尚未提交的修改时,产生脏读。
- 同一查询在同一事务 A 中多次进行,由于其他提交事务 B 所做的修改或者删除,每次返回不同的结果集,此时发生非重复读。
- 同一查询在同一事务 A 中多次进行,由于其他提交事务 B 所做的插入操作,每次返回不同的结果集,此时发生幻读。
- 这是oracle 默认的事务隔离机制
- 保证不会脏读,单可能出现非重复读和幻读。
- 提供了事务看起来像队列一样一个一个顺序执行。
- 仅仅能看到在本事务开始前由其他事务提交的更改和在本事务中所做的更改。
- 保证不会出现脏读、不可重复读和幻读
- serializable:提供了read-only 事务所提供的读一致性,同时又允许DML(update\insert\delete)操作
- 保证不会出现脏读、不可重复读和幻读
- 只能读,不能操作DML(update\insert\delete)操作。
- set transcation isolation level read committed;
- set transcation isolation level serializable;
- set transcation read-only;
- alter session set isolation_level read committed;
- alter session set isolation_level serializable;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。