- COMMIT
- ROLLBACK
- SAVEPOINT
TCL 은 트랜잭션 제어 언어로 DML 과 관련이 있다.
트랜잭션이란 데이터베이스의 논리적 연산 단위로 데이터 변경 사항을 묶어 하나의 트랜잭션에 담아 처리한다.
트랜잭션 종료 후 저장하는 역할로 트랜잭션에 임시 저장된 데이터 변경 사항을 DB 에 반영한다.
-- 경리부 삽입 (아직 DB에 실제로 삽입되지 않음)
INSERT INTO DEPARTMENT2 VALUES('D0', '경리부', 'L2');
-- 마지막 커밋 상태로 되돌아감 (트랜잭션 내용 모두 지움)
ROLLBACK;
-- ROLLBACK 확인
SELECT * FROM DEPARTMENT2;
-- 다시 경리부 INSERT
INSERT INTO DEPARTMENT2 VALUES('D0', '경리부', 'L2');
-- 트랜잭션에 저장된 DML을 DB에 반영
COMMIT;
트랜잭션 취소 역할로 트랜잭션에 임시 저장된 데이터 변경 사항을 삭제하고 마지막 COMMIT 상태로 돌아간다.
-- 이미 앞서서 COMMIT 수행 (돌아갈 내용이 없음)
ROLLBACK;
-- 경리부 남아있음
SELECT * FROM DEPARTMENT2;
임시 저장하는 역할로 트랜잭션에 저장 지점을 정의하여 ROLLBACK 수행 시 전체 작업을 삭제하는 것이 아닌 저장 지점까지만 일부를 ROLLBACK 한다.
-- DELETE 내역이 트랜잭션에 저장
DELETE FROM DEPARTMENT2 WHERE DEPT_ID = 'D1';
-- D1 삭제 구문 수행 후 시점을 저장
SAVEPOINT S1;
-- D2 삭제
DELETE FROM DEPARTMENT2 WHERE DEPT_ID = 'D2';
SELECT * FROM DEPARTMENT2;
-- D2 삭제 구문 수행 후 시점을 저장
SAVEPOINT S2;
-- D3 삭제
DELETE FROM DEPARTMENT2 WHERE DEPT_ID = 'D3';
SELECT * FROM DEPARTMENT2;
-- S2 까지만 ROLLBACK
ROLLBACK TO S2;
SELECT * FROM DEPARTMENT2;
-- S1 까지만 ROLLBACK
ROLLBACK TO S1;
SELECT * FROM DEPARTMENT2;
-- 트랜잭션의 모든 내용 삭제
ROLLBACK;
SELECT * FROM DEPARTMENT2;