본문 바로가기

개발자이야기/MSSQL이야기

임시 테이블 MS SQL

반응형

[[ TEMPORARY TABLE(임시 테이블) ]]

 

 

1. 설명
   개발자가 DML(INSERT, UPDATE, DELETE)문을 실행한 후
   트랜젝션을 종료(commit)하더라도 변경된 테이터들이
   DB테이블에 저장되지 않는 테이블이다.
   즉, 잠시 데이터를 저장하는 일시적 공간

 

2. 데이터를 유지하는 방법
   (1) ON COMMIT DELETE ROWS
      commit문을 실행할 때 '데이터'가 없어지는 옵션
      즉, 하나의 트랜젝션이 마무리될 때 함께 데이터가 없어진다.
      SQL> CREATE GLOBAL TEMPORARY TABLE t1(
          2    id NUMBER(5),
          3    salary NUMBER(10)) ON COMMIT DELETE ROWS;
      SQL> SELECT * FROM tab;
      SQL> INSERT INTO t1 VALUES(1, 100);
      SQL> INSERT INTO t1 VALUES(2, 200);
      SQL> SELECT * FROM t1;
      SQL> UPDATE t1 SET salary=300 WHERE id=2;
      SQL> COMMIT;
      SQL> SELECT * FROM tab;
          --> t1테이블은 존재
      SQL> SELECT * FROM t1;
          --> 레코드는 사라졌음

   (2) ON COMMIT PRESERVE ROWS
      commit문이 실행되면 임시테이블내에 데이터가 저장되었다가
      세션을 종료하면 임시테이블에 저장되었던 '데이터'들이
      없어지는 옵션
      즉, 하나의 세션이 마무리될 때 함께 데이터가 없어진다.
 
      < 세션 1 >
      SQL> CREATE GLOBAL TEMPORARY TABLE t2(
          2   id NUMBER(5),
          3   salary NUMBER(10)) ON COMMIT PRESERVE ROWS;
      SQL> INSERT INTO t2 VALUES(10, 1000);
      SQL> INSERT INTO t2 VALUES(20, 2000);
      SQL> SELECT * FROM t2;
      SQL> COMMIT;
      SQL> SELECT * FROM t2;
        --> 데이터(레코드)가 그대로 존재
      SQL> UPDATE t2 SET salary=3000 WHERE id=20;
      SQL> INSERT INTO t2 VALUES(50, 5000);
      SQL> DELETE FROM t2 WHERE id=10;
      SQL> COMMIT;

      < 세션 2 >
      SQL> SELECT * FROM tab;
        --> 임시테이블 t1과 t2가 보인다. (하드에 저장됨)
      SQL> SELECT * FROM t1;
        --> 레코드가 없다.
      SQL> SELECT * FROM t2;
        --> 레코드가 없다. (저장되지 않았다.)

 

3. 장점
   일시적으로만 필요한 데이터를 저장할 수 있다.
   즉, 어떤 시점을 기준으로 데이터가 자동 삭제되기때문에
   DB의 resouce에 절약이 된다.


   cf) 임시테이블의 삭제 방법
   SQL> DROP TABLE t1;
   SQL> DROP TABLE t2;
   -> t2 (ON COMMIT PRESERVE ROWS)는 데이터가 한번
     입력되었다면, 그 세션을 종료하고 다른 세션에서
     DROP을 시켜야 한다.

반응형