본문 바로가기
Backend

SELECT ... FOR UPDATE 사용하기

by hammii 2025. 2. 16.

SELECT ... FOR UPDATE는 특정 데이터를 조회하는 동시에

해당 행을 잠가 다른 트랜잭션이 수정하지 못하도록 막는 기능을 수행한다.

이를 통해 동시성 문제가 발생하는 것을 방지할 수 있다.

 

사용 예시

BEGIN
    SELECT * FROM users WHERE id = 1 FOR UPDATE;
    -- 이후 UPDATE 또는 DELETE 수행 가능
    COMMIT;
END;

users 테이블에서 id = 1인 행을 조회하고, 해당 행에 대한 잠금을 설정한다.

잠금이 유지되는 동안 다른 트랜잭션은 해당 행을 수정하거나 삭제할 수 없다.

 

옵션

1. NOWAIT

BEGIN
    SELECT * FROM orders WHERE order_id = 100 FOR UPDATE NOWAIT;
END;

NOWAIT 옵션을 사용하면, 다른 트랜잭션이 이미 잠금을 설정한 경우

즉시 오류(ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired) 를 반환한다.

 

2. WAIT n(초단위)

BEGIN
    SELECT * FROM orders WHERE order_id = 100 FOR UPDATE WAIT 5;
END;

최대 5초 동안 트랜잭션의 잠금이 해제되기를 기다린 후, 실패하면 오류를 반환한다.

 

 

 

'Backend' 카테고리의 다른 글

[ORACLE] 날짜 계산 시 INTERVAL vs ADD_MONTHS() 중 무엇이 더 적합할까 ?  (0) 2025.03.09
302 Found  (0) 2025.03.02
JPA 와 MyBatis 차이  (0) 2025.02.09
ORACLE과 MYSQL의 차이점  (0) 2025.02.02
JUnit 깔끔하게 작성하기  (1) 2025.02.02