포스트

06. TCL

TCL(Transaction Control Language)

  • COMMIT , ROLLBACK, SAVEPOINT
  • 데이터 변경 사항을 묶어 하나의 트랜잭션에 담아 처리한다
  • 대상이되는 데이터 변경 사항 : INSERT, UPDATE, DELETE + MERGE
1
2
3
INSERT 수행 ➡️ DB 반영(x)
INSERT 수행 ➡️ 트랜잭션에 추가 ➡️ COMMIT ➡️ DB 반영(o)
INSERT 10번 수행 ➡️ 1개의 트랜잭션에 10개 추가 ➡️ ROLLBACK  ➡️ DB 반영(x)

1) COMMIT

  • 메모리 버퍼(트랜잭션)에 임시 저장된 데이터 변경 사항을 DB에 반영
1
2
3
4
5
INSERT INTO DEPARTMENT VALUE ('T1', '개발1팀', 'L2');
-- DB에 반영된 상태가 아니다

COMMIT;
-- DB에 반영

2) ROLLBACK

  • 메모리 버퍼(트랜잭션)에 임시 저장된 데이터 변경 사항을 삭제하고, 마지막 COMMIT 상태(시점)으로 돌아간다. DB 반영(x)
1
2
3
4
5
INSERT INTO DEPARTMENT VALUE ('T1', '개발1팀', 'L2');
-- DB에 반영된 상태가 아니다

ROLLBACK;
-- 임시 데이터 삭제

3) SAVEPOINT

  • 메모리 버퍼(트랜잭션)에 저장 지점을 정의하여 ROLLBACK 수행 시 전체 작업을 삭제하는 것이 아닌 저장 지점까지 일부 ROLLBACK 한다
1
2
3
4
5
6
7
8
9
10
11
12
13
INSERT INTO DEPARTMENT VALUE ('T1', '개발1팀', 'L2');
SAVEPOINT SP1;

INSERT INTO DEPARTMENT VALUE ('T2', '개발2팀', 'L3');
SAVEPOINT SP2;

INSERT INTO DEPARTMENT VALUE ('T3', '개발3팀', 'L3');
SAVEPOINT SP3;

ROLLBACK TO SP1;
-- 임시 저장 데이터인 'T1', '개발1팀', 'L2' 이 값은 아직 유지
-- 과거 시점에서 미래 시점으로는 ROLLBACK 불가
-- EX) SP1으로 간 후 SP3로 돌아가지 못함