///////
Search
4️⃣

트랜잭션의 동시성과 LOCK 2

테이블 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마다 설정값이 다르고, 시간을 설정할 수 있다