본문 바로가기
개발공부 일지/오라클

오라클)SELECT * FOR UPDATE

by Box Cat 2023. 9. 30.
728x90
반응형

SELECT * FOR UPDATE는 현재 트랜잭션이 완료될 때까지 다른 트랜잭션에서 해당 행을 수정하지 못하도록 행을 잠그는 목적으로 사용됩니다.  충돌을 피하기 위한 기술입니다.

 

SELECT * FOR UPDATE 문의 작동 방식

  1. SELECT: 일반적인 SELECT 문으로 시작하며 지정된 조건을 기반으로 테이블에서 행을 검색합니다. 
  2. FOR UPDATE: SELECT 문의 끝에 FOR UPDATE 절을 추가합니다. 트랜잭션이 SELECT * FOR UPDATE 문을 실행하면 지정된 조건을 충족하는 행에 잠그게 되고, 현재 트랜잭션이 잠긴 행을 해제할 때까지 다른 트랜잭션이 이러한 행을 수정하지 못하게 합니다.

동시성 제어가 필요할 때,

좌석이나 티켓 예매시, 동시 접속자가 많아 둘 이상의 사람이 같은 자리를 동시에 선택할 경우.

 

다음은 기본적인 예제입니다.

----------------------------------------------------------------------------------------------------------------------------------------------------------------

SELECT 절에서 FOR UPDATE를 사용하면 해당 행에 LOCK이 걸리고 다른 사용자가 제어할 수 없다.

ex)  SELECT * FROM TEST

       WHERE USER = '1234'

       FOR UPDATE;

 

FOR UPDATE 옵션

1)NO WAIT

ex) SELECT * FROM TEST

      WHERE USER= '1234'

      FOR UPDATE NOWAIT;

 

2)WAIT SECOND

- 지정한 시간만큼 LOCK을 제어하려고 재시도 후 에러처리

ex) SELECT * FROM TEST

      WHERE USER = '1234'

      FOR UPDATE WAIT 5;

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------

COMMIT 문은 트랜잭션을 종료하고 잠금을 해제합니다.

 

FOR UPDATE를 사용할 때 주의해야 하며 이로 인해 잠금 충돌이 발생하고 데이터베이스의 동시성에 영향을 미칠 수 있으므로 주의해서 사용해야 합니다

 
728x90
반응형

댓글