Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스 문자열 정렬
- 알고리즘
- 스프링부트 도커로 배포
- Queue
- 프로그래머스 풀이
- lv2
- 스택
- 큐
- 프로그래머스
- 프로그래머스 자바
- 버퍼
- 오름차순 정렬
- 클라이언트
- COS Pro
- 자바
- Stack
- 스프링부트 도커
- 이진수 변환
- Programmers
- 삼각형의 완성조건
- java
- 문자열
- SWEA
- 백준
- lv0
- 백준 N과 M 자바
- Lv1
- index of
- StringTokenizer
- 스프링부트 도커 배포
Archives
- Today
- Total
mun dev
[DB] 락(LOCK)이란? 본문
락(LOCK)
- 같은 데이터를 동시에 갱신할 수 없는 락(LOCK)
터미널 1
update emp
set sal = 3000
where ename = 'JONES';
터미널2
update emp
set sal = 9000
where ename = 'JONES';
- 터미널 1에서 JONES의 월급을 3000으로 변경
- 터미널 2에서도 JONES의 월급을 9000으로 변경, 하지만 변경되지 않고 update문에 멈춰 있음, 터미널 창1에 접속한 행이 갱신하고 아직 commit이나 롤백을 수행하지 않았기 때문에 행이 잠겨 있음
- update문을 수행하면 update대상이 되는 행을 잠가(LOCK)버림
- update는 행전체르 잠그기 때문에 JONES 월급뿐만 아니라 다른 컬럼들의 데이터도 변경할 수 없고 WATING하게 됨
commit;
1행이 업데이트 되었습니다.
- update는 행 전체를 잠그기 때문에 JONE의 월급 뿐만 아니라 다른 컬럼들의 데이터도 변경할 수 없고 WAITING 하게 된다.
- 터미널 창1에서 COMMIT을 수행하게 되면 JONES의 월급은3000으로 저장되고 행에 걸렸던 잠금은 해제
- 터미널 창1에서 잠금을 해제 했기 때문에 창2도 수정 가능
락(LOCK)을 사용하는 이유
- 락(LOCK)을 거는 이유는 데이터의 일관성을 보장하기 위함
- 자기가 변경한 데이터를 커밋하기 전까지 일관되게 유지
SELECT FOR UPDATE
- 검색하는 행에
락(LOCK)
을 거는것
터미널1
select ename, sal, deptno
from emp
where ename = 'JONES'
for update;
터미널2
update emp
set sal = 9000
where ename ='JONES';
- SELECT FOR UPDATE문을 사용해 JONES 데이터 검색, JONES 행에 자동으로 락(LOCK) 걸림
- JONES의 월급을 9000으로 변경이 안되고 WAITING
- 터미널1창에서 commit을 수행하게 되면 LOCK이 해제되면서 터미널 창2의 UPDATE문이 수행
'DB' 카테고리의 다른 글
[PL SQL] CSV 파일로 데이터 삽입하기 (0) | 2024.03.29 |
---|---|
[SQL] 서브 쿼리 활용(INSERT, UPDATE, DELETE, MERGE) (1) | 2024.02.06 |
[DB] 데이터베이스 기초 개념 및 정리 (0) | 2024.02.01 |
[SQL] Join 이란, Join의 종류, inner join과 outer join의 차이점 (0) | 2024.01.22 |
[DB] DDL, DML, DCL 종류 및 개념 (0) | 2024.01.19 |