[[ 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을 시켜야 한다.
'개발자이야기 > MSSQL이야기' 카테고리의 다른 글
테이블 삭제 후 속성 초기화 (0) | 2009.03.16 |
---|---|
mssql 쿼리 모음 (0) | 2009.03.16 |
mssql 테이블 생성,수정,삭제 (2) | 2009.03.16 |
mssql 인젝션 해킹 방법 (2) | 2009.01.20 |
중국 해커들의 DB 인젝션 해킹기법 -펌글- (0) | 2008.12.15 |