은은하게 코드 뿌시기

[DB] LOCK 본문

Database -Mysql,Oracle

[DB] LOCK

은은하게미친자 2022. 8. 13. 19:33
728x90

LOCK?

: 조작중인 데이터를 다른세션이 조작 할 수없도록 접근을 보류시키는것.

세션에서 조작중인 데이터는 트랜잭션이 완료 되기 전까지 다른 세션에서 다른세션에서 조작할 수없는 상태가 됩니다.

즉, 데이터가 잠기는 것입니다. 하나의 데이터를 여러곳에서 동시에 조작 하려 할때 발생 할 수있는 혼란을 최소하기 위한 중요한 요소입니다.

 

=>  A와 B세션이 동시 접속 상황이고 같은 테이블의 데이터를 조회하고자 할때

A SESSION이 UPDATE 가 진행 될 경우 B SESSION은 대기 하게 됩니다.

A SESSION이 UPDATE 를 COMMIT시키면 B SESSION의 작업을 진행 하는 것을 알수 있습니다.

 

LOCK 종류

종류 설명
행 레벨록(row level lock) SQL문으로 조작하는 대상 데이터가 테이블의 특정행 데이터일 경우에 해당 행만 LOCK이 발생함
테이블 레벨록(table level lock) 테이블에 변경되는 행의 수와는 상관없이 데이터 조작 명령어를 사용하여 데이터가 변경 중인 테이블은 테이블 단위 잠금 , 데이터 변경중인 세션 외 다른 세션에서 (create, alter, rename, truncate, drop)을 통한 테이블 구조를 변경할 수 없음.

+ WHERE절을 지정하지 않은 UPDATE, DELETE문일 경우 테이블의 모든 행 데이터에 영향을 주는 명령어이므로 이 경우에는 테이블에 저장되어있는 전체 행이 LOCK상태가 됩니다. UPDATE, DELETE 명령을 수행하기 위해서는 대기해야 합니다. 하지만 테이블 전체 행이 LOCK상태여도 INSERT문의 수행은 가능합니다.

728x90
Comments