주문 처리 트랜잭션

주문/재고 트랜잭션

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

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으로 주문 생성까지 취소합니다.