-- TCL(TRANSACTION CONTROL LANGUAGE) : 트랜잭션 제어 언어
-- COMMIT(트랜잭션 종료 후 저장), ROLLBACK(트랜잭션 취소), SAVEPOINT(임시저장)
-- DML(INSERT,UPDATE,DELETE) 관련되어 있다.
/* TRANSACTION 이란?
INSERT 수행 ---> 트랜잭션에 추가 ---> COMMIT ----> DB반영(O) INSERT 10번 수행 --> 1개 트랜잭션에 10개 추가 --> ROLLBACK --> DB 반영 안됨 마지막 COMMIT 상태(시점)로 돌아감. (DB에 변경 내용 반영 X) ROLLBACK 수행 시 전체 작업을 삭제하는 것이 아닌 저장 지점까지만 일부 ROLLBACKSAVEPOINT 포인트명1;...SAVEPOINT 포인트명2;SELECT * FROM DEPARTMENT2;
-- 새로운 데이터 INSERT
INSERT INTO DEPARTMENT2 VALUES('T1', '개발1팀', 'L2');
INSERT INTO DEPARTMENT2 VALUES('T2', '개발2팀', 'L2');
INSERT INTO DEPARTMENT2 VALUES('T3', '개발3팀', 'L2');
-- INSERT 확인
SELECT * FROM DEPARTMENT2;
--> DB에 반영된 것 처럼 보이지만
-- SQL 수행 시 트랜잭션에 임시 저장된 상태
-- (실제로 아직 DB 반영 X)
ROLLBACK;
SELECT * FROM DEPARTMENT2;
-- 새로운 데이터 INSERT
INSERT INTO DEPARTMENT2 VALUES('T1', '개발1팀', 'L2');
INSERT INTO DEPARTMENT2 VALUES('T2', '개발2팀', 'L2');
INSERT INTO DEPARTMENT2 VALUES('T3', '개발3팀', 'L2');
SELECT * FROM DEPARTMENT2;
COMMIT;
SELECT * FROM DEPARTMENT2;
ROLLBACK;
SELECT * FROM DEPARTMENT2; --> 롤백 안됨!
-- SAVEPOINT 확인
INSERT INTO DEPARTMENT2 VALUES('T4', '개발4팀', 'L2');
SAVEPOINT SP1; -- SAVEPOINT 지정
SELECT * FROM DEPARTMENT2;
INSERT INTO DEPARTMENT2 VALUES('T5', '개발5팀', 'L2');
SAVEPOINT SP2;
SELECT * FROM DEPARTMENT2;
INSERT INTO DEPARTMENT2 VALUES('T6', '개발6팀', 'L2');
SAVEPOINT SP3;
SELECT * FROM DEPARTMENT2;
ROLLBACK TO SP1;
SELECT * FROM DEPARTMENT2;