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 |