SQL 트랜잭션 제어어(TCL) 완벽 정리

발라·2025년 7월 30일

서버 이해 첫걸음

목록 보기
11/11
post-thumbnail

안녕하세요! 오늘은 데이터베이스에서 트랜잭션 제어어(TCL) 가 무엇인지, 왜 필요한지, 그리고 실제 예제 코드를 통해 어떻게 사용하는지 단계별로 살펴볼 거에요. 예제에서는 가명(김철수, 박영희 등)으로 실제 사람 이름을 대체했으니, 바로 따라 해보세요!


1. 트랜잭션이란?

  • 트랜잭션(transaction)
    └ 업무 수행을 위한 최소 단위
  • 트랜잭션 4가지 특성 (ACID)
    1. 원자성(Atomicity): 모두 수행되거나 전혀 수행되지 않음
    2. 일관성(Consistency): 트랜잭션 전후 데이터 일관성 보장
    3. 고립성(Isolation): 수행 중인 트랜잭션은 외부에서 접근 불가
    4. 지속성(Durability): 성공적으로 완료된 트랜잭션 결과는 영구 보존

2. 예제 환경 준비

-- 1) 테이블 생성
CREATE TABLE smart_bank (
  account_no  VARCHAR2(50),
  owner       VARCHAR2(20),
  balance     NUMBER
);

-- 2) 샘플 데이터 삽입 (아직 COMMIT 전이어서 나중에 ROLLBACK 가능)
INSERT INTO smart_bank VALUES('0001-01-0001', '김철수',    5_000);
INSERT INTO smart_bank VALUES('0001-01-0002', '박영희',   20_000);
INSERT INTO smart_bank VALUES('0001-01-0003', '이수진', 1_000_000);

TIP: DML (INSERT, UPDATE, DELETE) 은 COMMIT 전까지 영구 반영되지 않아요.
DDL (CREATE, ALTER, DROP) 은 즉시 반영되고 ROLLBACK 불가에요.


3. ROLLBACK 으로 변경 취소하기

-- 변경된 데이터를 취소
ROLLBACK;

-- smart_bank 테이블이 비어있는 것 확인!
SELECT * FROM smart_bank;
  • ROLLBACK 명령어로 마지막 COMMIT 시점으로 되돌릴 수 있어요.
  • 아직 COMMIT 한 적 없으므로, 모두 취소되어요

4. COMMIT 으로 영구 반영하기

-- 다시 샘플 데이터 삽입
INSERT INTO smart_bank VALUES('0001-01-0001', '김철수',    5_000);
INSERT INTO smart_bank VALUES('0001-01-0002', '박영희',   20_000);
INSERT INTO smart_bank VALUES('0001-01-0003', '이수진', 1_000_000);

-- 확정!
COMMIT;

-- 반영된 데이터 확인
SELECT * FROM smart_bank;
  • COMMIT 후에는 ROLLBACK 으로도 복구 불가!
  • 데이터베이스에 완전히 영구 저장되어요.

5. 실제 시나리오: 계좌 이체 트랜잭션

  1. 이수진 님의 계좌에서 100만 원 출금
  2. 김철수 님의 계좌에 100만 원 입금
  3. 문제가 생기면 전체 취소 → 아니면 최종 COMMIT
-- 1) 출금
UPDATE smart_bank
   SET balance = balance - 1_000_000
 WHERE owner = '이수진';

-- 2) 입금
UPDATE smart_bank
   SET balance = balance + 1_000_000
 WHERE owner = '김철수';

-- 3) 오류 발생 시 전체 취소
-- ROLLBACK;

-- 4) 이상 없으면 확정
COMMIT;

-- 최종 잔액 확인
SELECT owner, balance
  FROM smart_bank
 WHERE owner IN ('이수진', '김철수');
  • 롤백을 호출하지 않으면, COMMIT 시 모든 변경 사항이 확정되어요.
  • 하나라도 실패하면 반드시 ROLLBACK 을 호출해서 원자성을 보장해야 해요!

마무리

  • TCL 은 트랜잭션 단위로 데이터 일관성과 안전성을 보장하는 핵심!
  • COMMITROLLBACK 을 적절히 사용해서
    • 중요한 작업은 확정하고,
    • 오류나 예외 상황엔 깔끔히 되돌리고
    • 데이터 무결성을 지키자!

작성일: 2025.07.30
작성자: 발라

profile
능숙한 바이브코딩을 할 수 있게 됨을 꿈꾸며

0개의 댓글