동시에 여러 트랜잭션이 데이터베이스의 동일한 자원에 접근할 때 발생할 수 있는 충돌을 방지하기 위한 메커니즘
즉, 한 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 트랜잭션이 해당 데이터를 수정할 수 없게 막아 데이터의 무결성을 유지하는 역할을 한다.
통장 잔고가 10000원인 상황에서, 구독료가 각각 10000원인 A서비스와 B서비스가 동시에 결제를 시도하면
돈이 모자라지만, A서비스와 B서비스 모두 결제가 성공한다. (접근 당시 잔고 금액이 업데이트 되지 않았기 때문, 즉 무결성이 훼손된 상황)
전체 DB에 Lock을 설정. 주요 DB 업데이트에 사용된다.
테이블, 로우 등의 실제 데이터가 쓰여지는 물리적인 저장소에 락을 설정
테이블에 Lock을 설정하고 주로 DDL 구문과 같이 전체 테이블에 영향을 주는 변경을 수행 시 유용
페이지와 블록에 락을 설정
컬럼에 락을 설정하고 락 설정 및 해제에 대한 리소스가 많이 들어서 지원하는 DBMS가 많지는 않음
로우에 락을 설정하고 가장 일반적으로 사용하는 락. DML에 대한 Lock
데이터를 조회할 경우 사용된다.
여러 사용자가 동시에 데이터를 읽어도 데이터 읽관성에는 아무런 영향을 주지 않기 때문에, 공유락 끼리는 동시 접근이 가능하다.
즉, 한 사용자가 데이터를 조회하는 시점에 다른 사용자가 데이터를 조회하는것 까지는 가능하지만, 변경은 불가능하다.
공유락이 설정된 데이터에 베타락 사용 불가능
베타 락은 다른 세션이 해당 자원에 접근하는것을 막고 트랜잭션이 완료될 때까지 유지된다.
베타 락은 해제될 때까지 다른 트랜잭션은 해당 리소스에 접근할 수 없으며, 변경 및 읽기가 불가능
UPDATE 쿼리의 WHERE 절에서 읽기 과정이 발생하고 그 후에 쓰기 과정이 발생하게 되는데 이 과정에서 데드락이 발생할 수 있는데 이를 방지하기 위해 사용하는 락
사용자가 요청한 범위에 락을 걸 수 있는지에 대한 유무를 파악하기 위해 사용하는 락