주문 처리 트랜잭션

주문 기록과 재고 차감은 함께 성공하거나 함께 취소되어야 합니다.

주문 헤더만 있고 재고가 줄지 않거나, 재고만 줄고 주문이 없는 상태를 막기 위해 하나의 트랜잭션으로 묶습니다.

BEGIN

주문 헤더 생성

INSERT INTO orders
status = 'PAID'

누가 언제 얼마짜리 주문을 만들었는지 공통 정보를 기록합니다.

DETAIL

주문 상세 생성

INSERT INTO order_items
quantity, unit_price

상품별 수량과 주문 당시 단가를 별도 행으로 남깁니다.

STOCK

재고 조건부 차감

UPDATE products
WHERE stock >= 1

재고가 충분할 때만 차감되도록 WHERE 조건에 재고 검사를 넣습니다.

영향 행 수 = 1

주문, 상세, 재고가 모두 일관된 상태이므로 COMMIT으로 확정합니다.

영향 행 수 = 0 또는 중간 실패

재고 부족이나 제약 위반이므로 ROLLBACK으로 주문 생성까지 취소합니다.