SAVEPOINT 分阶段回滚

有时一个长事务里只想撤销后半段、保留前半段。SAVEPOINT 就是事务内的「书签」,让你回滚到某个标记点而不是全部推翻。

SAVEPOINT 分阶段回滚要点

SAVEPOINT 分阶段回滚示例

						START TRANSACTION;
						INSERT INTO order_record (user_id, amount) VALUES (1, 100);
						SAVEPOINT sp_after_order;

						UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
						-- 余额不足,只撤掉扣款,保留订单插入
						ROLLBACK TO sp_after_order;

						RELEASE SAVEPOINT sp_after_order;
						COMMIT;
避坑提醒:长事务里多打几个 SAVEPOINT,就像游戏存档,哪步翻车就退到哪步,不必从头再来。
SAVEPOINT 分阶段回滚 · MySQL 事务 知识卡片
卡片 04 / 08 · MySQL 事务(1080×1440 速查卡片)

MySQL 事务知识点