// 결제 시스템
public class OrderService {
public void complatePayment() {
orderRepository.save(new Order(...)); // 주문정보
pointRepository.save(new Point(...)); // 포인트정보
billingHistory.save(new BillingHistory(...)); // 주문기록정보
}
}
위 코드에서 코드 실행중 포인트정보까지 실행되고 오류가 발생한다면?
주문정보와 포인트정보는 기록되었으나 주문기록에는 뜨지않는 현상이 발생한다.
모든 SQL을 성공하면 성공시키고, 하나라도 실패하면 모두 실패
// SQL문
start transaction; // 트랜잭션 시작
commit; // 정상종료(SQL반영)
rollback; // 실패처리(SQL미반영)
start transaction;
INSERT INTO user (name, age) VALUES ('A', 10);
SELECT * FROM user;
위 코드를 순서대로 실행하면 데이터가 INSERT되었는데도 불구하고 SELECT문에 아무것도 출력되지 않는다. 이는 commit 처리를 하지않았기 때문
commit;
위 명령어를 실행한다면 INSERT가 제대로 실행되고 트랜잭션이 종료되고
rollback;
위 명령어를 실행한다면 INSERT가 실패처리되고 트랜잭션이 종료된다