SELECT FOR UPDATAE NOWAIT
잠금 대상 레코드가 다른 세션에 잠겨있는 경우 대기가 아닌 바로 에러를 반환
innodb_lock_wait_timeout 옵션을 0으로 설정한 것과 유사한 효과 (기본값 50)
트랜잭션 내에서 NOWAIT 쿼리를 실행하여 에러가 반환되더라도, 열어둔 트랜잭션은 유지됨
SELECT FOR UPDATAE SKIP LOCKED
잠금 대상 레코드 중에 다른 세션에 의해 잠금이 걸려 있는 레코드는 스킵하고, 잠금이 걸려있지 않은 레코드를 잠그고 반환
잠금 대상 레코드가 비 결정적으로 정해짐 (쿼리 실행지 어떤 레코드가 잠금이 걸릴지 예측이 어려움)
잠금 대상 레코드들이 모두 잠겨있는 경우 빈 결과 반환 (상황에 따라서 Gap-Lock 점유)
ORDER BY & LIMIT 절과 함께 많이 사용됨
OneToMany 관계에서 조인을 통해 데이터를 조회할 때, 첫 번째 트랜잭션이 아직 커밋되지 않았다면, 두 번째 세션은 빈 결과를 반환할 수 있다. 이는 조인 대상 테이블에 잠금이 걸려 있기 때문이다.
예시(단일 테이블)

예시(조인)
