当前位置: 代码迷 >> 综合 >> Oracle 提交(commit)与回滚(rollback)
  详细解决方案

Oracle 提交(commit)与回滚(rollback)

热度:78   发布时间:2023-12-14 15:28:12.0

 

  数据库每执行一个事务,都会有一个提交或者回滚的操作,所以对于commit与rollback的掌握也是很有必要的,掌握好了他们,可以让我们在编写程序过程的过程中,更加有效的编写程序,以实现自己的需求。下面是对他们的常用用法总结:

提交(commit)

  事务的提交指的是把你刚刚操作的数据真正的写入到数据库中,已提交的事务不能rollback。

  COMMIT; --提交所有事物

回滚点(Savepoint)

  用于回滚时,如果想要撤回刚刚的操作,可以在这些操作之前设置一个保存点,在需要撤回时使用rollback进行回滚。

  SAVEPOINT 保存点名称;

例:

BEGINUPDATE table1 SET column1 = 'cs' WHERE 1 = 1;SAVEPOINT p1; --回滚点1DELETE FROM table1;--rollback to p1;--撤销删除事物ROLLBACK TO SAVEPOINT p1; --savepoint可省略END;

回滚(rollback)

  事务回滚是指将该事务已经完成的对数据库的更新操作撤销。一般rollback后的work关键字隐藏着

语法:

ROLLBACK [ WORK ] [ TO [SAVEPOINT] savepoint_name  | FORCE 'string' ];

例:

  ROLLBACK to 保存点名称; --撤销单个事务ROLLBACK; --不加保存点名称则撤销所有存在的事物ROLLBACK force '11.23.43'; --强制回滚到由事务 ID '11.23.43'标识的事务。

自治事务(PRAGMA AUTONOMOUS_TRANSACTION)

  定义成自治事务的Procedure,实际上相当于一段独立运行的程序段,这段程序不依赖于主程序,也不干涉主程序,所以其有以下特点:

  1. 这段程序不依赖于原有Main程序,比如Main程序中有未提交的数据,那么在自治事务中是查找不到的。
  2. 在自治事务中,commit或者rollback只会提交或回滚当前自治事务中的DML,不会影响到Main程序中的DML。

例:

--MAIN_TRANSACTION
PROCEDURE proce1 ISln_count NUMBER;
BEGINln_count := 1;UPDATE table1 SET column1 = ln_count WHERE 1 = 1;proce2;ROLLBACK; --最后更改结果table1表的column1值为2
END;--AUTONOMOUS_TRANSACTION
PROCEDURE proce2 ISPRAGMA AUTONOMOUS_TRANSACTION;ln_count NUMBER;
BEGINln_count := 2;UPDATE table1 SET column1 = ln_count WHERE 1 = 1;COMMIT;
END;

 

  相关解决方案