在数据库中,Savepoint(保存点) 用于在一个事务(Transaction)内部设置“标记点”,你可以回退到某个保存点,而不影响保存点之前已经执行的操作。
下面按常见数据库分别说明。
SAVEPOINT sp1;
ROLLBACK TO sp1;
或(部分数据库)
ROLLBACK TO SAVEPOINT 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;
-- 发现第二步有问题
ROLLBACK TO sp1;
-- 只回退第二步,第一步仍然有效
COMMIT;
SQL Server 使用 事务名 而不是 SAVEPOINT 关键字:
BEGIN TRAN;
UPDATE account SET balance = balance - 100 WHERE id = 1;
SAVE TRAN sp1;
UPDATE account SET balance = balance + 100 WHERE id = 2;
-- 回退
ROLLBACK TRAN sp1;
COMMIT TRAN;
Savepoint 必须在事务中
BEGIN; / START TRANSACTION;
ROLLBACK TO 不会结束事务
COMMIT 或 ROLLBACK回退范围
事务提交后保存点失效
如果你用的是某种具体数据库(MySQL / Oracle / PostgreSQL / SQL Server),我可以给你更精确的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。