본문 바로가기

Oracle/SQL

SQL Select 절에 LOCK 을 거는 For Update

LOCK 은 UPDATE 문을 수행할때 필요한 것.

→ 내가 변경하고자 하는 데이터를 다른 세션이 변경하지 못하도록 막을때 필요

SELECT 절에도 LOCK 을 걸 수 있다.

→ 마지막 절에 for update 라고 작성해 주면 select 절에 lock 이 걸린다.

왜 select 절에도 lock 이 필요할까?

→ 내가 만약 밤 12 시에 오늘의 총 매출 집계를 하고싶고

지금 select 하는 그 시점의 데이터로 집계하고 싶을때

누구도 내가 집계하려는 데이터를 변경하면 안된다. ~

그래서 그 누구도 데이터를 갱신하지 못하게 할때 for update 를 사용한다.

예시 

select ename, sal
from emp
where ename = 'KING'
FOR UPDATE ;

-> 마지막 문장에 for update 를입력해 실행 시켜주면 select 절에 lock 이 걸리게 된다. 

-> 이렇게 lock 이걸리면 다른 session 에서는 갱신 수정 하지 못한다.

-> commit; 을 수행하면다시 다른 session 에서도 실행된다.