DML과 트랜잭션
여러 DML은 하나의 성공 조건으로 묶어야 한다
출금, 입금, 이력 기록 중 하나라도 실패하면 전체 변경을 되돌리는 것이
원자성이다.
커밋 조건
모든 DML 성공, 영향 행 수 일치, 검증 조회 통과
중간 실패나 0행 UPDATE는 ROLLBACK 대상
BEGIN하나의 작업 단위 시작
출금 UPDATEA 계좌 잔액 차감
입금 UPDATEB 계좌 잔액 증가
이력 INSERTtransfer_history 기록
| 검사 | 확인 값 | 실패 시 결정 |
|---|---|---|
| 출금 | 잔액 부족 여부와 영향 행 수 1 | 부족하거나 0행이면 ROLLBACK |
| 입금 | 대상 계좌 존재와 영향 행 수 1 | 대상 없음이면 출금도 함께 취소 |
| 이력 | 금액, 양쪽 계좌, 시각 기록 | 기록 실패면 전체 취소 |
모두 성공검증 조회 후 COMMIT
부분 실패앞선 성공 DML까지 ROLLBACK
격리 확인다른 세션 노출 시점은 격리 수준에 따름