대상 행 지정
SELECT stock ... FOR UPDATE
재고 행 101을 읽으면서 X-Lock을 먼저 잡습니다.
SELECT ... FOR UPDATE 는 대상 행을 먼저 묶어 둡니다. 그동안 T1은 재고를 일관되게 바꾸고, 동시에 들어온 T2는 대기하거나 즉시 실패하거나 다른 행으로 이동합니다.
잠금 확보 → 수정 → 커밋 순서로 한 행의 값과 잠금 상태가 함께 이동합니다.
재고 행 101을 읽으면서 X-Lock을 먼저 잡습니다.
다른 세션의 UPDATE, DELETE, FOR UPDATE는 바로 끝나지 못합니다.
잠금을 유지한 채 재고를 10에서 9로 바꿉니다.
수정 결과를 확정하고 잠금을 해제합니다.
핵심 차이는 잠긴 행을 만났을 때의 처리 정책입니다.
T1이 커밋할 때까지 기다린 뒤, 그다음에 같은 행 잠금을 시도합니다.
잠금을 못 잡으면 바로 실패해서 재시도나 사용자 안내 흐름으로 넘깁니다.
행 101은 건너뛰고, 지금 잠금 가능한 다른 작업만 가져옵니다.