개주 훈련일지/📚 코살대 교본 학습

SQL) TCL (Transaction Control Language)

lshfood2 2026. 1. 9. 20:07

[ TCL 정의 ]

DML문의 입력, 수정, 삭제를 실행하면

DB에 곧바로 적용되지 않고 커밋COMMIT 명령을

실행해야만 DB에 최종 적용된다.

 

커밋 명령을 실행하지 않은 상태라면

롤백ROLLBACK 명령으로 변경을 취소할 수 있다.

 

TCL은 데이터의 입력/수정/삭제 후 커밋 혹은

롤백을 하는데 사용하는 SQL문이다.

(Transaction Control Language)


[ 트랜잭션의 특성 ]

트랜잭션은 DB의 논리적 연산 단위로,

1개의 트랜잭션에는 1개 이상의 SQL문이 포함된다.

 

또한 분할할 수 없는 최소의 단위로,

전부 적용하거나 전부 취소하는

ALL OR NOTHING의 개념이다.

 

▼ 4가지 특성

특성 설명
원자성 트랜잭션에서 정의된 연산들은
모두 성공적으로 끝나거나
모두 실패해야 한다.
일관성 트랜잭션이 실행되기 전, 데이터베이스의
내용이 잘못되어 있지 않다면
실행된 이후에도 데이터베이스의
내용에 잘못이 있으면 안된다.
고립성 트랜잭션이 실행되는 도중에
다른 트랜잭션의 영향을 받아
잘못된 결과를 만들어서는 안 된다.
지속성 트랜잭션이 성공적으로 수행되면
그 트랜잭션이 갱신한 데이터베이스의
내용은 영구적으로 저장된다.

[ 커밋과 롤백 ]

- 완료 명령어 : COMMIT

- 취소 명령어 : ROLLBACK

- 일부 취소 시 : SAVEPOINT

 

▼ 커밋/롤백 예시

UPDATE MEMBER SET CASH = CASH - 1000 WHERE MEMBER_ID = 1;
INSERT INTO PAY_LOG(MEMBER_ID, AMOUNT) VALUES(1, -1000);

-- 둘 다 성공했으면
COMMIT;

-- 중간에 문제 생겼으면
ROLLBACK;

 

▼ SAVEPOINT 활용 예시

-- 예시: 송금(계좌 A에서 출금 → 계좌 B로 입금) 중간에 SAVEPOINT로 안전지점 만들기

BEGIN
  -- 1) A 계좌에서 10,000원 출금
  UPDATE ACCOUNT
     SET BALANCE = BALANCE - 10000
   WHERE ACCOUNT_ID = 'A';

  -- 여기까지는 정상이라고 가정하고 체크포인트 생성
  SAVEPOINT after_withdraw;

  -- 2) B 계좌에 10,000원 입금
  UPDATE ACCOUNT
     SET BALANCE = BALANCE + 10000
   WHERE ACCOUNT_ID = 'B';

  -- 3) 입금 로그 남기기(예: 중복키 등으로 실패할 수도 있음)
  INSERT INTO TRANSFER_LOG (FROM_ID, TO_ID, AMOUNT, CREATED_AT)
  VALUES ('A', 'B', 10000, SYSDATE);

  -- 전부 성공하면 확정
  COMMIT;

EXCEPTION
  WHEN OTHERS THEN
    -- 2)나 3)에서 실패하면 출금까지만 남기고(=입금/로그만 취소) 싶을 때:
    ROLLBACK TO after_withdraw;

    -- 또는 전체 취소하려면 ROLLBACK; 로 바꾸면 됨
    COMMIT; -- 출금만 남긴 상태를 확정(상황에 따라 정책적으로 선택)
END;
/
  • SAVEPOINT after_withdraw;
    : “출금까지는 OK” 지점 저장
  • ROLLBACK TO after_withdraw;
    : 그 이후(입금/로그)만 되돌림

[ 트랜잭션의 요점 ]

테이블 내에서 데이터의 변경을 발생시키는

입력/수정/삭제 수행 시 그 변경되는 데이터의 무결성을

보장하는 것이 커밋과 롤백의 목적이다.

 

커밋은 변경된 데이터를 테이블에

영구적으로 반영하라 라는 의미이다.

 

롤백은 변경 전으로 복구하라 라는 의미이다.

 

SAVEPOINT는 데이터 변경 사항의 취소를

지정한 지점까지만 취소하라 라는 의미이다.

 

오라클 DBMS의 트랜잭션은 트랜잭션의 대상이 되는

SQL문을 실행하면 자동으로 시작되고,
커밋 또는 롤백을 실행한 시점에서 종료된다.

'개주 훈련일지 > 📚 코살대 교본 학습' 카테고리의 다른 글

SQL) WHERE절  (0) 2026.01.12
모델링  (0) 2026.01.10
요구 모델링  (0) 2026.01.08
SQL) DML (Data Manipulation Language)  (0) 2026.01.05
요구 검증  (0) 2026.01.04