시작 상태
balance
100만원
version
5
애플리케이션은 이 값을 읽고, `version = 5`라는 전제를 붙여 갱신을 시도합니다.
낙관적 잠금은 먼저 잠그지 않습니다. 대신 내가 읽은 버전이 아직 유효한지를 `WHERE version = 5`로 확인하고, 맞으면 쓰고 틀리면 바로 실패를 돌려줍니다.
애플리케이션은 이 값을 읽고, `version = 5`라는 전제를 붙여 갱신을 시도합니다.
UPDATE accounts
SET balance = 90,
version = version + 1
WHERE id = 1
AND version = 5;
현재 version도 5인가? 이 조건이 참일 때만 한 행이 갱신됩니다.
행 하나가 바뀌었다면, 이번 트랜잭션이 정상적으로 커밋 후보가 됩니다.