Oracle 回滚事务

Oracle的ROLLBACK语句用于撤销当前事务中的数据修改,恢复到事务开始前的状态。它利用回滚段中的数据前影像进行操作。COMMIT则是提交事务,将修改永久保存。使用COMMIT和ROLLBACK可以保证数据完整性并分组逻辑操作。SAVEPOINT允许在事务中设置保存点,方便部分回滚。

ROLLBACK:事务处理回退:

数据回滚:Oracle中,ROLLBACK语句可以用来撤销当前事务或有问题的事务,使数据变化失效,修改前的数据状态被恢复。

当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。 

 

例:使用ROLLBACK语句在Oracle中发出回滚,数据改变被取消。

 

ROLLBACK其实就是COMMIT的逆操作:

  1. 撤销已做的所有修改。其完成方式如下:如果先前插入了一行,ROLLBACK会将其删除。如果更新了一行,回滚就会取消更新。如果删除了一行,回滚将把它再次插入。
  2. 会话持有的所有锁都将释放,如果有人在排队等待我们持有的锁,就会被唤醒。
  3. 与此不同,COMMIT只是将重做日志缓冲区中剩余的数据刷新到磁盘,与ROLLBACK相比,COMMIT完成的工作非常少。

使用COMMIT ROLLBACK语句的优点:

  • 确保数据完整性。
  • 数据改变被提交之前预览。
  • 将逻辑上相关的操作分组。

语句自动提交:

不使用 COMMIT ROLLBACK 语句提交或回滚,正常结束会话。会话异常结束或系统异常会导致自动回滚。

 

提交或回滚前的数据状态:

  • 改变前的数据状态是可以恢复的
  • 执行 DML 操作的用户可以通过 SELECT 语句查询之前的修正
  • 其他用户不能看到当前用户所做的改变,直到当前用户结束事务。
  • DML语句所涉及到的行被锁定, 其他用户不能操作。

 

提交后的数据状态:

  • 数据的改变已经被保存到数据库中。
  • 改变前的数据已经丢失。
  • 所有用户可以看到结果。
  • 锁被释放,其他用户可以操作涉及到的数据。
  • 所有保存点被释放。

 

SAVEPOINT:设置保存点:

保存点:使用 SAVEPOINT 语句在当前事务中创建保存点。

 

 

回滚:使用 ROLLBACK TO SAVEPOINT 语句回滚到创建的保存点。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值