You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:53:19