什么是 ROLLBACK?
在 Oracle 数据库中,ROLLBACK 是用于撤销当前事务中所有未提交的更改的 SQL 语句。
它将数据库状态恢复到事务开始前的状态,常用于错误处理或取消操作。
基本语法
ROLLBACK;
执行此命令后,当前事务中的所有 DML(INSERT、UPDATE、DELETE)操作将被撤销。
使用示例
-- 开始一个事务
UPDATE employees SET salary = salary + 500 WHERE department_id = 10;
-- 如果发现错误,回滚更改
ROLLBACK;
上述操作不会对 employees 表产生实际影响,因为更改已被回滚。
ROLLBACK 与 SAVEPOINT
Oracle 还支持在事务中设置保存点(SAVEPOINT),实现部分回滚:
SAVEPOINT sp1;
DELETE FROM orders WHERE order_date < DATE '2020-01-01';
SAVEPOINT sp2;
UPDATE products SET stock = 0 WHERE discontinued = 'Y';
-- 仅回滚到 sp2
ROLLBACK TO sp2;
此时,DELETE 操作保留,而 UPDATE 被撤销。
注意事项
ROLLBACK只影响未提交的事务;已提交(COMMIT)的数据无法回滚。- DDL 语句(如 CREATE、ALTER)会隐式提交事务,不能回滚。
- 在自动提交模式下(如某些工具默认设置),每条语句都是独立事务,ROLLBACK 无效。