数据库每执行一个事务,都会有一个提交或者回滚的操作,所以对于commit与rollback的掌握也是很有必要的,掌握好了他们,可以让我们在编写程序过程的过程中,更加有效的编写程序,以实现自己的需求。下面是对他们的常用用法总结:
提交(commit)
事务的提交指的是把你刚刚操作的数据真正的写入到数据库中,已提交的事务不能rollback。
COMMIT; --提交所有事物
回滚点(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;
回滚(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,实际上相当于一段独立运行的程序段,这段程序不依赖于主程序,也不干涉主程序,所以其有以下特点:
- 这段程序不依赖于原有Main程序,比如Main程序中有未提交的数据,那么在自治事务中是查找不到的。
- 在自治事务中,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;