← 개념서모바일 버전
2과목 · SQL 기본 및 활용·5

TCL (COMMIT / ROLLBACK / SAVEPOINT)

트랜잭션 제어 SQL의 세부 동작, 묵시적 커밋 상황, SAVEPOINT 흐름을 정리합니다.

1. TCL이란

TCL(Transaction Control Language) 은 트랜잭션의 경계를 정하고 확정·취소하는 명령 집합입니다. 핵심은 COMMIT, ROLLBACK, SAVEPOINT.

2. COMMIT

현재 트랜잭션의 모든 변경을 영속화합니다. 커밋이 완료되면 다른 세션도 변경사항을 볼 수 있습니다.

BEGIN;
INSERT INTO orders (id, amount) VALUES (1, 100);
COMMIT;

3. ROLLBACK

현재 트랜잭션의 모든 변경을 취소합니다.

BEGIN;
UPDATE account SET balance = balance - 10000 WHERE id = 'A';
-- 앗, 금액이 틀렸다
ROLLBACK;

4. SAVEPOINT와 부분 ROLLBACK

긴 트랜잭션 중 부분적 취소가 필요할 때 사용.

BEGIN;
INSERT INTO orders (id, amount) VALUES (1, 100);

SAVEPOINT after_first;
INSERT INTO orders (id, amount) VALUES (2, -50); -- 잘못된 값

ROLLBACK TO SAVEPOINT after_first; -- 두 번째 INSERT만 취소
COMMIT; -- 첫 번째는 살아남음
  • SAVEPOINT는 이름을 붙여 여러 개 선언 가능.
  • ROLLBACK TO SAVEPOINT name 은 해당 지점 이후의 변경만 취소.
  • 트랜잭션이 COMMIT 또는 전체 ROLLBACK되면 모든 SAVEPOINT는 사라짐.

5. 묵시적 커밋

특정 SQL은 자동으로 트랜잭션을 종료시킵니다.

DDL은 자동 커밋 (Oracle)

BEGIN;
INSERT INTO log (msg) VALUES ('step 1');
CREATE TABLE tmp (id INT);  -- 이 순간 INSERT가 묵시적으로 COMMIT됨
ROLLBACK;                   -- 이미 커밋돼서 INSERT는 되돌릴 수 없음

DCL도 자동 커밋

GRANT/REVOKE를 실행하면 직전 DML이 커밋됩니다.

DBMS별 차이

  • Oracle: 기본적으로 수동 커밋. DDL/DCL은 묵시적 커밋.
  • MySQL: 기본 자동 커밋. SET autocommit=0으로 끌 수 있음.
  • PostgreSQL: 기본 자동 커밋. BEGIN으로 명시 트랜잭션 시작.

6. 세션 종료 시

세션이 정상 종료되면 현재 트랜잭션은 COMMIT됩니다 (Oracle). 세션이 비정상 종료되면 ROLLBACK 됩니다.

7. READ ONLY 트랜잭션

읽기만 하는 트랜잭션임을 선언해 옵티마이저 힌트와 일관성을 확보.

SET TRANSACTION READ ONLY;
SELECT ...
SELECT ...
COMMIT;

8. 자주 출제되는 포인트

  • DDL/DCL은 묵시적 커밋. 그래서 DDL 이후의 ROLLBACK은 효과가 없다.
  • SAVEPOINT는 부분 취소를 위한 지점. 전체 ROLLBACK과 다름.
  • 세션 정상 종료 = COMMIT / 비정상 종료 = ROLLBACK (Oracle).
  • ROLLBACK은 현재 열린 트랜잭션만 취소 (이미 커밋된 것은 되돌릴 수 없음).

9. 요약 체크리스트

  • COMMIT / ROLLBACK의 역할을 한 줄로 설명할 수 있다.
  • SAVEPOINT와 ROLLBACK TO의 사용 흐름을 쓸 수 있다.
  • DDL/DCL의 묵시적 커밋 성격을 안다.
  • DBMS별 기본 auto-commit 설정 차이를 안다.