Skip to content
seunghun kang edited this page Aug 21, 2024 · 3 revisions

격리 수준 별 lock의 동작 방식 차이

사용한 쿼리

set autocommit = false;
start transaction;
select * from comment where id <= 2000000 and id %2 = 0 for update;
select * from comment;

SELECT * FROM performance_schema.data_locks;

rollback;
  • 참고로 for update 대신 for share를 사용하여 read lock을 걸어도 아래의 결과는 동일하다.

Read UnCommitted, Read Committed

  • Read Committed에서 for update문(write lock, x-lock)은 조건 절을 통해 레코드에 접근할 때 락을 걸고, 자신이 처리할 레코드가 아니면 즉시 락을 해제한다.
스크린샷 2024-08-21 오후 2 02 40
  • 결과는 짝수 레코드에만 락이 걸린 것을 확인할 수 있다.

Repeatable Read, Serializable

  • Repeatable Read에서는 레코드에 락을 걸고, 조건절에 부합하지 않아도 락을 즉시 해제하지 않는다. 즉, 트랜잭션이 끝날 때까지 락을 유지한다.
    • 그래서 다른 트랜잭션이 홀수 번 레코드에 어떤 작업을 하려고 시도해도 읽기 및 변경이 불가능하게 된다.
스크린샷 2024-08-21 오후 2 03 02
  • 결과는 짝수,홀수 모두 락이 걸린 것을 확인할 수 있다.

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally