`

事务 学习笔记

 
阅读更多

       事务:事务是数据库的中的一个逻辑工作单元,由一系列的数据库操作组成,这些操作要么全部成功完成,要么全部失败,即不对数据库留下任何影响。事务是数据库系统工作的一个不可分割的基本单元。事务可以包含一个对数据库进行操作的完整的用户程序,也可以值包含一个更新操作。


      事务有三种模型:
       1.隐式事务是指每一条数据操作语句都自动地成为一个事务,每个事务都有显式的开始和结束标记。
       2.显式事务是指有显式的开始和结束标记的事务,事务的开始是隐式的,事务的结束有明确的标记。
       3.自动事务是系统自动默认的,开始和结束不用标记。

 

     事务的主要语句语句
 开始事物:BEGIN TRANSACTION  :标识事务从此句开始执行,也是事务回滚的标志点,可省略
 提交事物:COMMIT :提交,事务正常执行完,通知系统更新数据库,事务正常结束
 回滚事务:ROLLBACK :事务非正常结束,通知系统,所有完成的更新操作全部撤销,将事务回滚至事务开始处并重新开始执行。

   显示事务被begin transaction 与 end transaction 标识起来,其中的 update 与 delete 语句或者全部执行或者全部不执行, 如:
     begin transaction T1
       update student
       set name='Tank'
       where id=2006010
       delete from student
       where id=2006011
     commit
     end transaction T1

 

关于savepoint

用户在事务(transaction)内可以声明(declare)被称为保存点(savepoint)的标记。保存点将一个大事务划分为较小的片断。

用户可以使用保存点(savepoint)在事务(transaction)内的任意位置作标记。之后用户在对事务进行回滚操作(rolling back)时,就可以选择从当前执行位置回滚到事务内的任意一个保存点。例如用户可以在一系列复杂的更新(update)操作之间插入保存点,如果执行过程中一个语句出现错误,用户可以回滚到错误之前的某个保存点,而不必重新提交所有的语句。

在开发应用程序时也同样可以使用保存点(savepoint)。如果一个过程(procedure)内包含多个函数(function),用户可以在每个函数的开始位置创建一个保存点。当一个函数失败时, 就很容易将数据恢复到函数执行之前的状态,回滚(roll back)后可以修改参数重新调用函数,或执行相关的错误处理。

当事务(transaction)被回滚(rollback)到某个保存点(savepoint)后,Oracle将释放由被回滚语句使用的锁。其他等待被锁资源的事务就可以继续执行。需要更新(update)被锁数据行的事务也可以继续执行。

将事务(transaction)回滚(roll back)到某个保存点(savepoint)的过程如下:
1. Oracle 回滚指定保存点之后的语句
2. Oracle 保留指定的保存点,但其后创建的保存点都将被清除
3. Oracle 释放此保存点后获得的表级锁(table lock)与行级锁(rowlock),但之前的数据锁依然保留。

被部分回滚的事务(transaction)依然处于活动状态,可以继续执行。

一个事务(transaction)在等待其他事务的过程中,进行回滚(roll back)到某个保存点(savepoint)的操作不会释放行级锁(row lock)。为了避免事务因为不能获得锁而被挂起,应在执行 UPDATE 或 DELETE 操作前使用 FORUPDATE ... NOWAIT 语句。(以上内容讲述的是回滚保存点之前所获得的锁。而在保存点之后获得的行级锁是会被释放的,同时保存点之后执行的SQL 语句也会被完全回滚)。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics