라일락 꽃이 피는 날

[Oracle] Select For Update 본문

프로그래밍/Oracle

[Oracle] Select For Update

eunki 2022. 6. 3. 17:55
728x90

락(LOCK)

특정 행을 갱신하는 update 문장이 있다면, 그 update 문장을 수행하는 세션은 update 하는 행에 lock 을 건다.

그리고 그 lock 은 commit 이나 rollback 을 할 때까지 유지된다.

 

왜 lock 을 거는 걸까?

내가 변경하고 있는 데이터를 지금 변경하고 있는 이 순간에는 나만이 변경할 수 있고,

다른 세션들은 변경하지 못하도록 하기 위해서다.

 

내가 변경한 데이터를 누군가 바로 변경했다면 데이터의 일관성이 깨지게 된다.

lock은 데이터의 일관성이 깨지지 않도록 해준다.

 

 

Select For Update

보통 lock 은 update 문을 수행할 때 필요한 것이다.

그런데 select 를 할 때도 lock 을 걸 수 있다. 

 

 

 

 

예제 1. 오늘 밤 12시에 오늘 전국 총 매출을 집계 하고 싶다.

select sum(매출)
    from 테이블
    where 날짜 = '2022/06/03'
    for update;

정확한 집계를 위해서 아무도 데이터를 갱신하지 못하도록  해당 행을 잠깐 잠궈버린다.

728x90