ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL - TCL (Transaction Control Language)
    DataBase/Oracle 2022. 1. 27. 21:05
    728x90
    반응형

     

    TCL (Transaction Control Language) 란?

     

    • 한꺼번에 수행되어야 할 최소의 작업 단위를 말한다.
    • 하나의 트랜잭션으로 이루어진 작업은 반드시 한꺼번에 완료(COMMIT)되어야 하며
      그렇지 않은 경우에는 한꺼번에 취소(ROLLBACK)되어야 한다.
    • DDL 경우 auto COMMIT이 된다.
    • COMMIT : 트랜잭션 작업이 정상 완료되면 변경 내용을 영구히 저장
    • ROLLBACK : 트랜잭션 작업을 취소하고 최근 COMMIT 한 시점으로 이동
    • SAVEPOINT 세이브포인트 명 : 현재 트랜잭션 작업 시점에 이름을 정해줌
                                             하나의 트랜잭션 안에 구역을 나눈다.
    • ROLLBACK TO 세이브포인트명 : 트랜잭션 작업을 취소하고 SAVEPOINT 시점으로 이동

     

     

    COMMIT과 ROLLBACK

     

    -- 테이블 생성
    CREATE TABLE TBL_USER(
      USERNO NUMBER UNIQUE,
      ID VARCHAR2(20) PRIMARY KEY,
      PASSWORD CHAR(20) NOT NULL
    );
    
    -- 데이터 삽입
    INSERT
      INTO TBL_USER A
    ( A.USERNO, A.ID, A.PASSWORD)
    VALUES
    (  1, 'test1', 'pass1');
    
    -- 데이터 삽입
    INSERT
      INTO TBL_USER A
    ( A.USERNO, A.ID, A.PASSWORD)
    VALUES
    (  2, 'test2', 'pass2');
    
    COMMIT;

     TBL_USER 테이블에 2개 행을 삽입하여 COMMIT을 하였다. 그다음 다시 1개 행을 삽입하고 ROLLBACK 하면 어떻게 되는지 알아보자.

     

    -- 데이터 삽입
    INSERT
      INTO TBL_USER A
    ( A.USERNO, A.ID, A.PASSWORD)
    VALUES
    (  3, 'test3', 'pass3');
    
    ROLLBACK;

    왼쪽은 삽입한 후, 오른쪽은 COMMIT한 후 SELECT으로 추출한 모습

     이와 같이 ROLLBACK을 하면 COMMIT 시점으로 되돌아 가는 것을 볼 수 있다.


     

    SAVEPOINT와 ROLLBACK TO

     

    INSERT
      INTO TBL_USER A
    ( A.USERNO, A.ID, A.PASSWORD)
    VALUES
    (  3, 'test3', 'pass3');
    
    SAVEPOINT SP1;
    
    INSERT
      INTO TBL_USER A
    ( A.USERNO, A.ID, A.PASSWORD)
    VALUES
    (  4, 'test4', 'pass4');

     2개의 행을 COMMIT한 시점에서 다음과 같이 [ 3, 'test3, 'pass3' ] 행을 삽입하고 SAVEPOINT SP1을 해주었다. 다시 [3, 'test3, 'pass3'] 행을 삽입하면 해당 테이블은 다음과 같이 데이터들이 저장된다.

     

     이 상태에서 ROLLBACK TO SP1을 해주면 SAVEPOINT로 저장한 SP1 시점으로 다시 되돌아 가게된다. 물론 COMMIT을 하게 되면 다시 COMMIT시점으로 되돌아가게 된다.

    왼쪽은 ROLLBACK TO SP1, 오른쪽은 ROLLBACK을 해주었을때 테이블에 저장된 데이터

     

    728x90
    반응형

    댓글

Designed by Tistory.