테이블 Lock
•
테이블 전체 데이터를 범위로 잠그는 것을 테이블 락 이라고 한다
•
테이블 락도 배타 락과 공유 락으로 구분
테이블 공유 락
•
특정한 세션이 테이블에 공유 락을 걸면 각 세션들은 공유 락을 가질 수 있고 테이블의 데이터를 읽을 수만 있다.
•
다른 세션이 데이터를 수정하려고 한다면 공유 락이 반환될 때까지 기다려야 한다.
•
테이블에 공유 락을 걸면 각 세션들 공유 락을 가질 수 있고 데이터 읽을 수만 있다.
•
다른 세션에서 수정하려면 공유 락을 반환할 때까지 대기
•
공유 락을 잠근 세션만 해제 가능 UNLOCK TABLES; 구문
테이블 배타 락
•
배타 락으로 잠긴 경우 배타 락 세션이 데이터 변경하는 동안 다른 세션 접근 불가
→ 데이터가 변경되는동안 잘못된 데이터를 읽지못하게 막기 위해
•
테이블 범위 배타 락은 잠금이 해제될 때까지 모든 세션 데이터를 읽을 수 없다.
(인텐션 배타 락과 차이점)
•
배타락을 잠근 세션만 해제 가능 UNLOCK TABLES; 구문
테이블 락과 인텐션 락의 연관성
테이블 락 : 전체 락
레코드 락 : 부분 락
•
A 세션이 3번 데이터를 변경하기 위해 Intention 배타 락을 획득하고 변경하는 동안 B 세션은 A 세션의 작업이 끝난 뒤에 테이블 락을 획득할 수 있다.
테이블락과 인텐션 락의 관계
공유 락
세선 A 테이블을 공유 락으로 잠금 → 세션 C 데이터를 읽어도 문제 없다
세선 A 테이블을 공유 락으로 잠금 → 세션 B 데이터 수정 불가능
세선 A 테이블을 공유 락 잠금 해제 → 세션 B UPDATE 구문 실행 가능
베타 락
세선 A 테이블을 베타 락으로 잠금 → 세션 A 를 제외한 모든 세션이 해당 테이블 읽기 & 쓰기 금지
테이블 베타 락은 테이블 내의 데이터에 대한 최상위 잠금
LOCK WAIT TIMEOUT
•
잠금이 해제될 때까지 무한정 기다려야 하므로 대기하는 시간의 제한을 두어 락을 얻는데 실패했다고 알려준다
•
기다리는 시간이 10초로 지정되어 있다면 10초 이후에 락을 얻는데 실패했다고 알려준다.
•
각 DBMS마다 설정값이 다르고, 시간을 설정할 수 있다