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