본문 바로가기

DATABASE/TRANSACTION

04. 수정 중인 데이터 접근을 막는 LOCK

LOCK이란?

특정 세션에서 조작중인 데이터는 트랜잭션이 완료(COMMIT, ROLLBACK)되기 전까지 다른 세션에서 조작할 수 없는 상태가 된다. 즉 데이터가 잠기는(LOCK) 것이다. LOCK는 조작 중인 데이터를 다른 세션은 조작할 수 없도록 접근을 보류 시키는 것이다.

 

LOCK 종류

LOCK은 하나의 데이터를 여러 곳에서 동시에 조작할 때 발생할 수 있는 혼란을 최소화 하는 중요한 요소이다.

SQL문으로 조작하는 대상 데이터가 테이블의 특정 행 데이터일 경우에 해당 행만 LOCK이 발생한다는 의미로 행 레벨 록 이라고 한다. WHERE절을 지정하지 않은 UPDATE,DELETE문의 경우에는 테이블의 모든 행 데이터에 영향을 주는 명령어이므로 데이블이 저장된 전체 행이 LOCK상태가 된다. 즉 다른 세션에서는 해당 테이블에 이미 저장되어 있는 행에 UPDATE, DELETE명령을 수행하기 위해 대기해야 한다. 하지만 테이블 전체 행이 LOCK 상태여도 INSERT문의 수행은 가능하다. 하지만 테이블에 변경되는 행의 수와는 상관없이 데이터 조작 명령어를 사용하여 데이터가 변경중인 테이블은 테이블 단위 잠금이라는 의미로 테이블 레벨 록이 걸리게 된다. 즉 데이터를 변경 중인 세션 외 다른 세션에서 데이터 정의어를 통한 테이블의 구조를 변경할 수는 없다.