欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-05 09:48:41
...

 

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

提交(commit)

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

  COMMIT; --提交所有事物

回滚(rollback)

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

语法:

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

例:

  ROLLBACK to 保存点名称; --撤销单个事务

  ROLLBACK; --不加保存点名称则撤销所有存在的事物

  ROLLBACK force '11.23.43'; --强制回滚到由事务 ID '11.23.43'标识的事务。

回滚点(Savepoint)

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

  SAVEPOINT 保存点名称;

例:

BEGIN

  UPDATE table1 SET column1 = 'cs' WHERE 1 = 1;

  SAVEPOINT p1; --回滚点1

  DELETE FROM table1;

  --rollback to p1;--撤销删除事物
  ROLLBACK TO SAVEPOINT p1; --savepoint可省略

END;

自治事务(PRAGMA AUTONOMOUS_TRANSACTION)

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

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

例:

--MAIN_TRANSACTION
PROCEDURE proce1 IS
  ln_count NUMBER;
BEGIN

  ln_count := 1;

  UPDATE table1 SET column1 = ln_count WHERE 1 = 1;

  proce2;

  ROLLBACK; --最后更改结果table1表的column1值为2
END;

--AUTONOMOUS_TRANSACTION
PROCEDURE proce2 IS
  PRAGMA AUTONOMOUS_TRANSACTION;
  ln_count NUMBER;
BEGIN

  ln_count := 2;

  UPDATE table1 SET column1 = ln_count WHERE 1 = 1;

  COMMIT;
END;

 

相关标签: 事务