벤더 사마다 Lock의 종류와 전략이 다르다. 여기서는 Mysql의 InnoDB의 Lock에 대해 알아본다.

1. Lock?

특정 데이터에 동시 접근이 발생할 경우 일관성과 무결성을 지키기 위해 데이터에 잠금을 건다. 데이터를 먼저 선점하는 트랜잭션에게 읽기, 수정, 쓰기 권한을 준다.


2. 공유 락 (Shared Lock = S-Lock)

Read Lock이라고도 불리는 공유 락은 말 그대로 읽기 권한만 주어지는 잠금이다. SELECT만 실행 가능하며, 쓰기 연산은 실행 불가능 하다. 공유 락이 걸린 데이터에 다른 트랜잭션도 공유 락을 획득할 수 있으나, 배타 락(Exclusive Lock)은 획득 불가능하다.

조회한 데이터가 락이 해제되기 전까지 변경되지 않음을 보장한다.

select * from tb where id = 1 for share;

3. 배타 락 (Exclusive Lock = X-Lock)

Write Lock이라고도 불리는 배타 락은 읽기, 쓰기 연산 모두 실행 가능하다. 즉, 다른 트랜잭션에서 접근시, 모든 연산이 수행되지 않으며, 공유 락, 배타 락 모두 획득이 불가능하다는 말이다.

select * from tb where id = 1 for update;