SQL

SQL 52(락/LOCK)

아리빠 2023. 8. 14. 10:41

LOCK: 같은 데이터 동시에 갱신할 수 없도록 함

 

순서 SCOTT으로 접속한 터미널 창 1 SCOTT으로 접속한 터미널 창 2
1 update emp
set sal =3000
where ename ='JONES';
1행이 업데이트
 
2   update emp
set sal = 9000
where ename='JONES';
                                                                   << 멈춤
3 COMMIT;
커밋 완료
 
4   1행이 업데이트

터미널 창 1에서 jones의 월급을 3000으로 업데이트

터미널 창 2에서 jones의 월급을 9000으로 변경, 그러나 변경되지 않고 update문이 멈춰있는다 -> 터미널 창 1에서 접속한 SCOTT세션이 jones의 행을 갱신하고 아직 commit/rollback을 수행하지 않았기 때문에 해당행이 잠겨있음

 

update문을 수행하면  update 대상이 되는 행을 잠굼(LOCK)처리

행 전체를 잠궈버리기에 jones월급 뿐만 아니라 다른 컬럼들의 데이터도 변경 할 수 없음

 

터미널 창 1에서 commit 수행 시 jones의 월급은 3000으로 저장, 행에 걸린 잠금 해제

 

터미널 창1에서 행에 걸린 잠금이 해제 되었기에 터미널 창 2는 jones의 월급을 9000으로 수정 가능하다


Lock은 데이터 일관성과 무결성을 유지하기 위해 사용

여러 트랜잭션이 동시에 같은 데이터를 수정하려고 할 때, 이를 제어하여 충돌이나 데이터 손실을 방지

Lock의 종류는 크게 두 가지:

공유 Lock (Shared Lock 또는 Read Lock): 하나의 트랜잭션이 데이터를 읽을 때 사용 ,  다른 트랜잭션이 읽기 작업을 수행하는 것은 허용하지만, 해당 데이터에 대한 수정은 막는다 + 다수의 트랜잭션이 동시에 데이터를 읽을 수 있도록 함

배타적 Lock (Exclusive Lock 또는 Write Lock): 하나의 트랜잭션이 데이터를 수정할 때 사용, 데이터 수정 중에는 다른 어떠한 트랜잭션도 그 데이터에 대한 읽기나 수정을 수행할 수 없다. 데이터의 일관성을 유지하기 위해 사용

Lock은 트랜잭션이 데이터에 접근하거나 수정하는 시점에 적용되며, 트랜잭션이 완료되거나 롤백될 때 해제됩니다. Lock의 사용은 데이터베이스의 성능과 동시성 관리 측면에서 중요. 너무 많은 Lock이 발생하면 동시성이 감소하여 성능 문제를 유발할 수 있지만, Lock이 충분하지 않으면 데이터의 일관성이 깨질 수 있음.