sqld

TCL(트랜잭션 제어)

자격증원톱 2026. 2. 27. 10:10
반응형

TCL(트랜잭션 제어)

반응형

 

1) 트랜잭션(Transaction) 한 줄 정의

여러 개의 SQL 작업을 하나의 ‘묶음 작업’으로 처리하는 단위입니다.
이 묶음은 마지막에 COMMIT하면 확정되고, ROLLBACK하면 취소됩니다.


2) ACID 특성(이미지 표 핵심)

트랜잭션이 안전하게 동작하려면 아래 성질을 만족해야 합니다.

  • A(Atomicity, 원자성): 전부 성공하거나 전부 실패(부분만 반영 X)
  • C(Consistency, 일관성): 규칙(제약조건 등)을 깨지 않게 유지
  • I(Isolation, 고립성): 동시에 실행돼도 서로 영향 최소화
  • D(Durability, 지속성): COMMIT된 결과는 장애가 나도 유지

3) COMMIT: “지금까지 변경을 확정 저장”

의미

  • COMMIT을 하면 그 트랜잭션이 종료되고,
  • 지금까지 한 INSERT/UPDATE/DELETE 결과가 영구 반영됩니다.
  • COMMIT 이후에는 그 변경을 ROLLBACK으로 되돌리기 어렵습니다.

예시(이미지 흐름)

  1. 특정 직원 삭제(DELETE)
  2. 신규 직원 추가(INSERT)
  3. 급여 인상(UPDATE)
  4. 부서 변경(UPDATE)
  5. COMMIT → 위 변경들이 전부 “확정”
-- 여러 DML 수행
DELETE FROM emp WHERE ename IN ('YONGMOON', 'YONGMOON2');
INSERT INTO emp (...) VALUES (...);
UPDATE emp SET sal = sal * 1.1 WHERE empno = 7935;
UPDATE emp SET deptno = 30 WHERE empno = 7902;

-- 확정
COMMIT;
 
 
 

4) ROLLBACK: “COMMIT 이전 상태로 되돌리기”

의미

  • 트랜잭션 내에서 변경한 내용을 전부 취소하고,
  • 마지막 COMMIT 시점(또는 트랜잭션 시작 시점)으로 돌아갑니다.
  • 즉, “방금 한 실수는 없던 일”로 만듭니다.

예시(이미지)

  • 7935 직원 급여 40% 인상, 부서 30 변경까지 했는데
  • 뭔가 잘못돼서 ROLLBACK → 인상/부서변경이 전부 취소되고 원래 값으로 복구
UPDATE emp SET sal = sal * 1.4 WHERE empno = 7935;
UPDATE emp SET deptno = 30 WHERE empno = 7935;

ROLLBACK; -- 전부 취소
 
 
 

중요한 주의: Auto-commit

이미지에 나온 포인트:

  • 툴(DBA 도구) 설정이 Auto-commit이면, DML마다 자동으로 COMMIT되어
    ROLLBACK이 먹히지 않을 수 있습니다.
  • 실습할 때는 Auto-commit 설정을 확인하는 습관이 필요합니다.

5) SAVEPOINT: “중간 체크포인트 찍기”

의미

  • 트랜잭션 도중에 “여기까지는 괜찮다”라는 저장 지점을 찍습니다.
  • 그 다음 문제가 생기면 전체 ROLLBACK이 아니라, 특정 SAVEPOINT까지만 되돌릴 수 있습니다.

핵심 문법

  • 저장: SAVEPOINT sp1;
  • 부분 취소: ROLLBACK TO sp1;

예시(이미지 시나리오 그대로)

  1. 트랜잭션 시작(개념상 BEGIN)
  2. 8001 삽입
  3. SAVEPOINT sp1
  4. 8002 삽입
  5. SAVEPOINT sp2
  6. 8003 삽입(여기서 문제 발생)
  7. ROLLBACK TO sp2 → 8003만 취소, 8001/8002는 유지
  8. COMMIT → 남은 것(8001, 8002)을 확정
-- (개념상 트랜잭션 시작)

INSERT INTO emp (...) VALUES (8001, ...);
SAVEPOINT sp1;

INSERT INTO emp (...) VALUES (8002, ...);
SAVEPOINT sp2;

INSERT INTO emp (...) VALUES (8003, ...); -- 문제 발생했다고 가정

ROLLBACK TO sp2; -- 8003만 취소
COMMIT; -- 8001, 8002 확정
 
 
 

한 줄 정리(시험용)

  • COMMIT: 변경 확정(되돌리기 어려움)
  • ROLLBACK: 변경 전체 취소(마지막 COMMIT 이전으로)
  • SAVEPOINT: 중간 지점 저장 → ROLLBACK TO로 부분 취소
반응형