오라클에서는 테이블의 일부 레코드 또는 테이블에 대한 Lock을 걸수 있다.
Lock이 걸린 Record(Table)에 대해서는 Commit, Rollback문을 수행하기 전까지 다른 세션에서 Delete, Update를 할 수 없다.
하지만 Lock을 걸더라도 다른 세션에서 Select는 가능하다.
▣ Table Lock
- 문법 : lock table TABLE_NAME in exclusive mode;
- Table Lock이 걸린 테이블에 대해서는 다른 세션에서 Insert, Update, Delete를 할 수 없다.
- Table Lock이 걸리더라도 다른 세션에서 Select는 가능하다.
- Commit, Rollback 문장 실행으로 Lock을 풀 수 있다.
▣ Record Lock
- 문법 : select * from TABLE_NAME where CONDITION for update;
- "for update" 키워드를 이용한다.
- "for update" 를 이용한 Select 문에서의 CONDITION에 해당하는 레코드들에 대해 Lock이 설정된다.
- Lock이 걸린 Record들에 대해서는 다른 세션에서 Delete, Update를 할 수 없다.
- Lock이 걸리지 않은 Record들에 대해서는 다른 세션에서 Delete, Update를 할 수 있다.
- Record Lock을 걸더라도 다른 세션에서 테이블에 대한 Insert는 가능하다.
- Record Lock이 걸리더라도 다른 세션에서 Select는 가능하다.
- Commit, Rollback 문장 실행으로 Lock을 풀 수 있다.
[Example1] - Table Lock
-- EMP 테이블에 대해 Insert, Delete, Update를 금지한다.
LOCK TABLE EMP IN exclusive mode
[Example1] - 모든 레코드에 대한 Record Lock
-- EMP 테이블의 모든 레코드에 대해 Delete, Update를 금지한다
SELECT *
FROM EMP
FOR UPDATE
[Example1] - 일부 레코드에 대한 Record Lock
-- EMP 테이블에서 "empno = 100" 조건의 레코드에 대해 Delete, Update를 금지한다
SELECT *
FROM EMP
WHERE empno = 100
FOR UPDATE
☞ 본문 출처 : http://www.enjoydev.com/blog/46