< TCL : TRANSACTION CONTROL LANGUAGE >

      트랜잭션 제어 언어 
     
     * 트랜잭션 (TRANSACTION)
     - 데이터베이스의 논리적 연산단위
     - 데이터의 변경사항(DML)들을 하나로 묶어서 처리할 때 필요한 개념
     - DML(INSERT,UPDATE,DELETE)문을 한번 수행할 때 트랜잭션이 존재하면 해당 트랜잭션에 같이 묶어서 처리 
                            트랜잭션이 존재하지 않으면 새로운 트랜잭션을 만들어서 묶음 
                            
     - COMMIT   : 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영 시키겠다는 의미 (후에 트랜잭션 사라짐) 
     - ROLLBACK : 트랜잭션에 담겨있는 변경사항들을 삭제(취소) 한 후 마지막 COMMIT 시점으로 돌아감  
     - SAVE POINT 포인트명 : 현재 시점에 해당 포인트명으로 임시저장점을 정의해두는 것 
                                               ROLLBACK시 전체 취소가 아니 일부만 ROLLBACK가능함 

예시 ) ROLLBACK

SELECT * FROM EMP_01;
-- 사번이 900인 사원 삭제 
DELETE FROM EMP_01 
WHERE EMP_ID = 900;

--901번 사원 삭제
DELETE FROM EMP_01
WHERE EMP_ID = 901;

ROLLBACK;

>> ROLLBACK 하면 삭제된 부분 취소됨 

 

예시 ) COMMIT

DELETE FROM EMP_01
WHERE EMP_ID = 200;

--800번 사원 추가
INSERT INTO EMP_01
VALUES(800,'홍길동','총무부');

COMMIT;
SELECT * FROM EMP_01;
ROLLBACK;

>> COMMIT 하면 트랜잭션에 담겨있던 사항들 DB에 반영되어 이후 ROLLBACKD해도 변경사항이 취소되지않음

 

예시)  SAVEPOINT

--217, 216, 214사원 삭제
DELETE FROM EMP_01
WHERE EMP_ID IN( 217,216,214);

SAVEPOINT SP;

-- 801 사원 추가 
INSERT INTO EMP_01
VALUES(801,'김말똥','인사관리부');

--218 사원 삭제
DELETE FROM EMP_01
WHERE EMP_ID = 218;

ROLLBACK TO SP; --SP시점까지만 롤백 

COMMIT;

>> SAVEPOINT SP 로  3명의 사원 삭제한 부분까지를 저장하고 , 이후 ROLLBACK TO SP를 하면 그 부분으로 되돌아감
     ( 801사원 추가/ 218 사원 삭제 부분은 취소됨 )

 

** 주의 사항 

--900, 901사원 지움
DELETE FROM EMP_01
WHERE EMP_ID IN (900,901);

--DDL문(CREATE, ALTER, DROP)
CREATE TABLE TEST(
    TID NUMBER
);
--DDL문 입력되는 순간 COMMIT되버림 ( 트랜잭션에 담겨있던것 DB에 반영되어 롤백해도 취소 불가) 
ROLLBACK;

>> DDL문(CREATE, ALTER,DROP)을 수행하는 순간 무조건 COMMIT(실제 DB에 반영)
     즉, DDL문 수행 전 변경사항들이 있다면 정확히 픽스 (COMMIT,ROLLBACK)하고 진행

'ORACLE' 카테고리의 다른 글

ORACLE 11. OBJECT (VIEW) _ DML  (0) 2022.11.24
ORACLE 11. OBJECT (VIEW)  (0) 2022.11.24
ORACLE 09. DCL(GRANT, REVOKE)  (0) 2022.11.24
ORACLE 08. DDL (ALTER, DROP)  (0) 2022.11.23
ORACLE 07. DML (DELETE)  (0) 2022.11.23
복사했습니다!