DB
Oracle SELECT ~ FOR UPDATE (동시성 해결)
snail voyager
2022. 3. 23. 00:19
728x90
반응형
동시성 제어를 위해 특정 Row에 Lock을 거는 Row-Level Exclusive Lock (X Lock)
- 특정 Row를 변경하기 전 해당 Row를 SELECT 했을 때 다른 Transaction 에서 변경 가능한 동시성 (Phantom Reads) 해결을 위해 사용
- UPDATE, DELETE 구문처럼 SELECT ~ FOR UPDATE 실행 시 COMMIT/ROLLBACK 전까지 다른 Transaction 에서 SELECT 불가
- Table Lock 이 아니기 때문에 SELECT COUNT(*) FROM TABLE 같은 구문에 사용 불가
SELECT COUNT
FROM TABLE
WHERE ID = #{ID}
FOR UPDATE; -- Lock 이 풀릴 때까지 무한정 대기
FOR UPDATE NOWAIT; -- Lock 이 걸려있으면 대기하지않고 바로 에러 발생
FOR UPDATE WAIT 5; -- Lock 이 걸려있으면 5초 대기 후 에러 발생
728x90
반응형