기본 패턴
text
BEGIN;
UPDATE accounts
SET balance = balance - 100
WHERE id = 1;
SAVEPOINT after_withdraw;
UPDATE accounts
SET balance = balance + 100
WHERE id = 2;
COMMIT;설명
- 트랜잭션은 여러 SQL 문을 하나의 작업 단위로 묶는 개념입니다.
- 도중에 문제가 생기면
ROLLBACK으로 처음 상태로 되돌릴 수 있고, 끝까지 성공하면COMMIT으로 확정합니다. - 이런 구조는 송금, 재고 차감, 주문 생성처럼 여러 단계가 함께 성공해야 의미가 있는 작업에서 필수적입니다.
SAVEPOINT는 트랜잭션 안에 중간 복귀 지점을 만드는 기능입니다. 전체를 취소하지 않고 특정 지점까지만 되돌릴 수 있습니다.- 결국 트랜잭션은 "부분 성공을 허용하지 않겠다"는 데이터 안정성 선언이라고 이해하면 좋습니다.
짧은 예제
text
BEGIN;
UPDATE products
SET stock = stock - 1
WHERE id = 100;
SAVEPOINT after_stock_change;
INSERT INTO orders (product_id, quantity)
VALUES (100, 1);
ROLLBACK TO after_stock_change;
COMMIT;빠른 정리
| 문법 | 역할 |
|---|---|
BEGIN | 트랜잭션 시작 |
COMMIT | 변경 확정 |
ROLLBACK | 전체 취소 |
SAVEPOINT | 중간 복귀 지점 생성 |
주의할 점
트랜잭션을 오래 열어 두면 잠금과 경합이 커질 수 있습니다. 안전성은 중요하지만, 필요한 범위만 짧게 묶는 습관이 운영 환경에서는 특히 중요합니다.
참고 링크
1 sources