CS/SQL

SELECT FOR UPDATE문

coffee. 2025. 3. 4. 22:05

SELECT FOR UPDATE문이란?

- 트랜잭션 내에서 레코드를 잠그기 위해 사용

- 다중 사용자 환경에서 데이터 무결성을 유지하면서 동시성 제어를 위해 사용됩니다.

- 데이터 무결성 : 데이터의 정확성, 일관성, 유효성이 유지되는 것

 

SELECT * FROM 테이블명 WHERE 조건 FOR UPDATE;

 

이 쿼리는 조건에 맞는 행들으 선택하고 , 해당 행에 대해 업데이트 잠금을 걸어 다른 트랜잭션이 해당 행을 수정하지 못하도록 합니다. 

SELECT FOR UPDATE문의 옵션

  1. NOWAIT
    1. SELECT FOR UPDATE문에서 잠금을 기다리지 않도록 설정합니다.
    2. 만약 해당 행이 이미 잠겨있다면, 트랜잭션은 즉시 오류를 발생시키며 대기하지 않고 끝납니다.
  2. SKIP LOCKED
    1. SKIP LOCKED는 다른 트랜잭션이 잠그고 있는 행을 건너뛰고, 잠금이 걸리지 않은 행만 선택합니다.
    2. 이 옵션은 “기다리지 않고, 가능한 행만 선택”하는데 사용됩니다. 예를 들어, 데이터베이스에서 다른 트랜잭션에 의해 잠긴 데이터를 무시하고, 처리할 수 있는 데이터만 빠르게 처리하고자 할 때 유용합니다.
  3. WAIT [seconds]
    1. WAIT 옵션은 다른 트랜잭션이 잠금을 해제할 때까지 일정 시간동안 기다리도록 설정할 수있습니다.
    2. WAIT 시간 내에 잠금을 획득하지 못하면, 쿼리는 오류를 발생시키지 않고 그냥 종료됩니다.