after_order는 이 상태를 기준점으로 기억합니다.
ROLLBACK TO after_order는 트랜잭션 전체를 취소하지 않습니다. SAVEPOINT 뒤에서 시도한 order_items만 지운 뒤, 다른 상품으로 다시 넣고 같은 트랜잭션에서 COMMIT할 수 있습니다.
주문은 이미 생성되었고, 상세항목은 아직 없습니다.
재고 부족이 확인되면 이 시도만 취소 대상으로 봅니다.
기준점으로 돌아간 뒤 다시 넣고 같은 트랜잭션을 커밋합니다.
after_order는 이 상태를 기준점으로 기억합니다.
이 입력은 SAVEPOINT 이후에 발생했으므로 문제가 생기면 지울 수 있습니다.
ROLLBACK TO로 101 입력을 없앤 뒤, 102를 다시 넣어 최종 상세항목으로 확정합니다.
SAVEPOINT after_order
INSERT INTO order_items (... product_id = 101 ...) -- 재고 부족 발견
ROLLBACK TO after_order INSERT INTO order_items (... product_id = 102 ...) COMMIT
ROLLBACK TO after_order 이후에도 트랜잭션은 계속 열려 있습니다. 그래서 마지막에는 COMMIT 또는 전체 ROLLBACK으로 마무리해야 합니다.