• 우리 이거 읽고 있으니 수정 하지 마
  • 읽기만할꺼야 수정위해 가져가거나(잠금)하면 ㄴㄴ
  • 여러 트잭이 데이터 조회하는동안 데이터 수정 못하게 막음
  • 공유 잠금
  • 여러 트잭이 동시에 같은 리소스에 대한 S-Lock 가질 수 있음
  • 다른 트잭과 동시에 락 잡을수 있다는 것은 다른 트잭도 다눗ㄴ 조회를 할 경우이기 때문
  • 즉, 여러 트갲이 동시에 읽을수는 있지만, 수정은 불가!

공유락 걸린 레코드에서는 다음과 같은 일 발생

  • 다른 트잭도 공유락 획득 가능
  • 다른 트잭이 배타락 획득 불가
  • 다른 트잭이 해당 레코드 UPDATE, DELETE 불가
  • 락 없는 일반 SELECT 허용

주요 사용 사례

  • 읽은 데이터가 트잭 중에 변경되지 않도록 보장해야 할 때
  • 보고서 생성이나 집계 작업 중 데이터 일관성 필요할 때
  • 읽기 작업 중 데이터가 변경되면 안되는 경우
START TRANSACTION:
SELECT * FROM a WHERE id = 1 LOCK IN SHARE MODE; -- S LOCK
...
 

공유락은 획득하면 업데이트 하지 마라! 나는 조회할건데 너도 조회하고 싶으면 해도됨

SELECT 와 공유락은 다르다!!!

  • MySQL InnoDB는 SELECT시 공유락 안걸고 조회함!
  • 배타락을 그 레코드에 걸든 안걸든 SELECT 시 공유락 걸지 않으니 조회가 가능한 것
    • S Lock은 읽는 동안 수정 발생않게 잠그는 것
    • X Lock은 쓰는 동안 수정이 발생않게 잠그는 것
  • 별 차이 없어 보이지만, 이 둘의 결정적 차이는 락 사이의 호환 여부!