Oracle事务控制解惑:无START TRANSACTION时如何管控提交与回滚
Oracle事务控制:无需
START TRANSACTION的隐式事务机制 Oracle的事务是隐式启动的,不需要专门执行START TRANSACTION语句,事务的边界由COMMIT和ROLLBACK来界定,具体控制方式如下:
1. 提交事务
当你执行第一条DML语句(INSERT/UPDATE/DELETE等)时,事务会自动启动。后续所有未提交的操作都属于当前事务,执行COMMIT;即可提交所有操作,使其永久生效。
示例代码:
-- 已提交的初始状态 INSERT INTO users(id, name) VALUES(1, 'Alice'); UPDATE users SET name = 'Bob' WHERE id = 1; -- 提交上述所有DML操作 COMMIT;
2. 回滚事务
如果操作出现问题,或者仅需测试无需保留修改,直接执行ROLLBACK;即可撤销当前事务内的所有未提交操作,回到上一次COMMIT或会话启动后的状态。
测试场景示例:
-- 已提交的初始操作 INSERT INTO users(id, name) VALUES(2, 'Charlie'); -- 事务自动启动(执行这条UPDATE时) UPDATE users SET name = 'David' WHERE id = 2; -- 回滚UPDATE操作,初始的INSERT仍保持提交状态 ROLLBACK;
3. 进阶:使用保存点精准回滚
如果需要只回滚部分操作,可以用SAVEPOINT设置保存点,之后回滚到指定位置,保留保存点之前的操作:
INSERT INTO users(id, name) VALUES(3, 'Eve'); -- 设置保存点 SAVEPOINT update_before; UPDATE users SET name = 'Frank' WHERE id = 3; -- 仅回滚到保存点,保留INSERT操作 ROLLBACK TO SAVEPOINT update_before; -- 提交最终保留的操作 COMMIT;
额外说明
- 每次
COMMIT或ROLLBACK执行后,下一条DML语句会自动启动新的事务。 - 如果会话意外断开(比如关闭客户端),Oracle会自动回滚当前未提交的事务,避免数据不一致。
内容的提问来源于stack exchange,提问作者Manngo
相关产品推荐
相关产品推荐

