在数据库中,Savepoint(保存点) 用于在一个事务(Transaction)内部设置“标记点”,以便可以回滚到事务中的某个中间状态,而不是回滚整个事务。下面从概念、使用方式、管理要点和常见数据库示例几个方面说明。
ROLLBACK TO savepoint_name:回滚到某个保存点(事务仍继续)RELEASE SAVEPOINT(部分数据库支持):释放保存点START TRANSACTION;
INSERT INTO orders ...;
SAVEPOINT sp1;
UPDATE accounts SET balance = balance - 100;
-- 如果出错
ROLLBACK TO sp1;
COMMIT;
SAVEPOINT sp1;
UPDATE emp SET sal = sal + 100;
ROLLBACK TO sp1;
Oracle 中事务默认开启,无需 START TRANSACTION
BEGIN TRANSACTION;
SAVE TRANSACTION sp1;
DELETE FROM temp_table;
ROLLBACK TRANSACTION sp1;
sp_before_update)常见模式:
BEGIN
操作1
SAVEPOINT sp1
操作2(可能失败)
IF 错误 THEN ROLLBACK TO sp1
END
RELEASE SAVEPOINT sp1;
✅ 适合:
❌ 不适合:
ROLLBACK TO SAVEPOINT 不会释放已加的锁Savepoint = 事务中的“后悔药”
用得好:提高容错、简化逻辑
用不好:事务变长、锁冲突增加
如果你有具体数据库(MySQL / Oracle / PG / SQL Server)或使用场景(如存储过程、批量导入),我可以给你更针对性的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。