数据库 Savepoint(保存点) 是用来在一个事务内部做“局部标记”的机制,可以理解成事务中的“检查点”或“回滚点”。
下面从概念、作用、用法和示例几个角度来说明。
在一个数据库事务中:
BEGIN:开始事务COMMIT:提交整个事务ROLLBACK:回滚整个事务但有时候你不想回滚全部,只想回滚到事务中的某一步,这时就用 Savepoint。
Savepoint = 事务内的“子回滚点”
SAVEPOINT sp1;
ROLLBACK TO sp1;
RELEASE SAVEPOINT sp1;
BEGIN;
UPDATE account SET balance = balance - 100 WHERE id = 1;
SAVEPOINT sp1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
-- 假设这一步出错了
UPDATE account SET balance = balance + 100 WHERE id = 999; -- 不存在
ROLLBACK TO sp1;
COMMIT;
| 对比项 | ROLLBACK | ROLLBACK TO SAVEPOINT |
|---|---|---|
| 回滚范围 | 整个事务 | 到指定保存点 |
| 是否还能提交 | 不能 | 可以 |
| 使用场景 | 整体失败 | 局部失败 |
COMMIT,所有 Savepoint 失效如果你愿意,我也可以:
你可以告诉我你用的是哪种数据库或语言。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。