공유 행
accounts.id = 1
같은 행을 두 세션이 건드리면, 먼저 변경한 트랜잭션이 잠금을 잡고 종료 전까지 유지합니다.
핵심 이해
긴 트랜잭션은
긴 잠금 시간입니다.
잠금이 오래 풀리지 않으면 뒤에서 같은 행을 수정하려는 작업도 같이 멈춥니다.
1
잠금 획득
세션 A가 먼저 UPDATE
UPDATE ... WHERE id = 1
X Lock 보유 시작
2
트랜잭션 진행 중
같은 행 수정은 여기서 막힙니다
세션 A
변경 완료 후에도 X Lock 유지
세션 B
같은 id = 1 UPDATE 시도 -> 대기
사용자 확인, 외부 호출 대기를 트랜잭션 안에 넣으면 이 대기 구간도 함께 길어집니다.
3
트랜잭션 종료
COMMIT 또는 ROLLBACK
END TRANSACTION
잠금 해제 후 다음 작업이 진행됨
실무 원칙
트랜잭션은 짧게 유지해서 잠금 시간을 줄입니다.
사용자 입력 대기는 트랜잭션 밖에서 처리합니다.