01. TCL (Transaction Control Language)
TCL은 데이터베이스의 트랜잭션을 관리하는 데 사용되는 명령어들로, 트랜잭션의 작업을 저장하거나 취소할 수 있습니다. 주요 TCL 명령어에는 COMMIT, ROLLBACK, SAVEPOINT 등이 있습니다.
1. COMMIT (저장)
- COMMIT은 트랜잭션의 모든 변경 사항을 데이터베이스에 영구적으로 저장하는 명령어입니다.
- COMMIT을 실행한 후에는 해당 트랜잭션에서 수행된 변경 사항을 되돌릴 수 없습니다.
- 모든 작업이 정상적으로 완료되었을 때 사용합니다.
-- 예시: 사원 테이블에 새로운 사원 정보 저장
INSERT INTO EMP (EMPNO, ENAME, JOB, SAL) VALUES (7934, 'MILLER', 'CLERK', 1300);
COMMIT; -- 변경 사항을 영구 저장
2. ROLLBACK (실행 취소)
- ROLLBACK은 트랜잭션의 변경 사항을 취소하고, 트랜잭션이 시작되기 전의 상태로 되돌리는 명령어입니다.
- 데이터의 무결성 문제나 오류 발생 시 사용됩니다.
-- 예시: 사원 테이블에서 데이터 삭제 후 취소
DELETE FROM EMP WHERE ENAME = 'MILLER';
ROLLBACK; -- 삭제된 내용을 취소하여 원래대로 복원
3. TRANSACTION (트랜잭션)
- 트랜잭션은 데이터베이스 내에서 논리적으로 하나의 작업 단위로 처리되는 SQL 작업들의 집합입니다.
- 트랜잭션은 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability)을 보장해야 하며, 이를 흔히 ACID 특성이라고 합니다.
트랜잭션은 다음과 같은 흐름으로 이루어집니다:
-- 트랜잭션 흐름
BEGIN TRANSACTION; -- 트랜잭션 시작
INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 1300); -- INSERT 작업
UPDATE EMP SET SAL = 1500 WHERE EMPNO = 7934; -- UPDATE 작업
DELETE FROM EMP WHERE EMPNO = 7934; -- DELETE 작업
COMMIT; -- 모든 작업을 확정하여 데이터베이스에 저장하거나
-- 또는 ROLLBACK; -- 변경 사항을 취소하고 이전 상태로 복구
4. SESSION (세션)
- 세션(Session)은 데이터베이스와 사용자 간의 연결을 의미합니다. 사용자가 데이터베이스에 접속하면 세션이 생성되며, 작업이 완료되거나 접속이 종료될 때 세션이 종료됩니다.
- 세션은 유저명, 비밀번호, 호스트(IP), 포트 번호 등을 기반으로 연결됩니다.
세션 흐름:
- 사용자가 SQL*Plus 또는 SQL Developer 등을 통해 데이터베이스에 접속.
- 세션이 열리고, 사용자는 트랜잭션을 수행할 수 있음.
- 사용자가 로그아웃하거나 연결이 끊기면 세션이 종료됨.
5. LOCK (잠금)
- Lock은 여러 사용자가 동시에 동일한 데이터에 접근할 때 데이터의 무결성을 유지하기 위해 사용됩니다.
- 잠금은 주로 행 레벨(Row-Level) 또는 **테이블 레벨(Table-Level)**로 적용되며, 잠긴 상태에서는 다른 사용자가 동일한 데이터에 대한 변경 작업을 수행할 수 없습니다.
-- 예시: USER1이 사원 데이터를 수정하는 동안 잠금 발생
USER1:
UPDATE EMP SET DEPTNO = 10 WHERE EMPNO = 7934; -- USER1이 작업 중인 EMPNO 7934는 잠금 상태
-- USER1이 COMMIT하기 전까지 다른 사용자는 해당 데이터를 수정할 수 없음
COMMIT;
-- USER2: USER1의 작업이 완료되기 전까지 잠금 대기 상태
USER2:
UPDATE EMP SET DEPTNO = 20 WHERE EMPNO = 7934; -- USER1이 작업 완료 시점까지 대기
COMMIT;
행 레벨 잠금:
- 특정 행(row)만 잠가서 해당 행에 대한 변경을 방지. 다른 사용자는 잠긴 행 외의 데이터를 수정할 수 있음.
테이블 레벨 잠금:
- 테이블 전체에 대한 잠금. 해당 테이블에 대한 모든 변경 작업을 제한함.
트랜잭션 관리 시 주의 사항
- 트랜잭션이 끝나지 않은 상태에서의 세션 종료: 트랜잭션이 완료되지 않은 상태에서 세션이 종료되면 변경 사항이 자동으로 ROLLBACK됩니다.
- Lock 관리: 잠금이 걸린 데이터에 대해 다른 사용자는 변경 작업을 수행할 수 없으므로, 트랜잭션이 너무 오래 걸리면 성능 저하나 교착 상태(Deadlock)가 발생할 수 있습니다.
'SQL > 개념' 카테고리의 다른 글
09. 객체 종류 (0) | 2023.05.09 |
---|---|
08. 데이터 정의어(DDL) (0) | 2023.05.09 |
06. 데이터 조작어(DML) (0) | 2023.05.08 |
05. 서브쿼리 (0) | 2023.05.03 |
04. 조인 (0) | 2023.05.03 |