안녕하세요! 오늘은 데이터베이스에서 트랜잭션 제어어(TCL) 가 무엇인지, 왜 필요한지, 그리고 실제 예제 코드를 통해 어떻게 사용하는지 단계별로 살펴볼 거에요. 예제에서는 가명(김철수, 박영희 등)으로 실제 사람 이름을 대체했으니, 바로 따라 해보세요!
-- 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 불가에요.
-- 변경된 데이터를 취소
ROLLBACK;
-- smart_bank 테이블이 비어있는 것 확인!
SELECT * FROM smart_bank;
ROLLBACK 명령어로 마지막 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 으로도 복구 불가! -- 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 을 호출해서 원자성을 보장해야 해요!작성일: 2025.07.30
작성자: 발라