티스토리 뷰

SQL/MySQL

[MySql] Temporary Table 생성

A형개발자 2016. 10. 12. 22:53

MySql Temporary Table 생성

MySql에서는 임시 테이블을 생성 할 수 기능을 제공있으며, 특정 결과 셋을 임시적으로 저장 할 수 있게 한다. 임시 테이블은 접속한 Single session에 한하여 얼마든지 재사용이 가능하다. 임시 테이블는 사용 할 수 있는 곳이 아주 많다. 조인이 필요한 테이블의 조합이 불가능 하거나, 사용 비용이 높을 경우 필요한 데이터의 값만을 임시 테이블에 저장 후 조인을 통해서 필요한 데이터를 만들어 낼 수 있다. 임시 테이블은 특히 Stored Procedures 에서 유용하게 사용이 가능하다.

문법

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

예제

    DECLARE i_blogID INT;    
    DECLARE i_index INT;
    DECLARE i_max INT;
    
    DROP TEMPORARY TABLE IF EXISTS tmp;
    CREATE TEMPORARY TABLE tmp (
	id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
	blogID  int
    );

    INSERT INTO tmp (blogID)
    SELECT blogID FROM umejintan.blog where categoryID = 70;
    
    SELECT MAX(ID) INTO i_max from tmp;
    SET i_index = 1;
    WHILE(i_max >= i_index) DO
       
       SELECT blog into i_blogID FROM tmp WHERE id = i_index;
       
       UPDATE umejintan.blog
       SET hashTag = ''
       WHERE blogID = i_blogID;
       
       ...
       /* Calculate each tag count */
       ...

       SET i_index = i_index + 1; 
    END WHILE; 

Description

실제로 사용하는 예제이다. 반복적으로 복수의 Blog의 값을 수정하거나 업데이트 해야 하는 경우가 생긴다. 또는 블로그별 통계 정보를 업데이트 하는 경우가 있다. 예제로는 CetegoryID 가 70 인 데이터를 뽑아서 Temporary Table에 저장 한 후 순차적으로 필요한 일련의 작업을 진행하고 있다. 전체의 소스를 보여 줄 수는 없지만 실제로는 복수의 Process를 진행을 하고 있다. 위의 경우엔 blogID가 일련의 숫자값이 아니기 때문에 임시 테이블에 ID 컬럼을 AUTO_INCREMENT 으로 생성하고 blogID는 별도 저장 후 ID 에 값에 맞춰 순차적으로 BlogID 를 얻어내 데이터의 업데이트를 진행한다. Fetch/cursor 를 사용하여 작업을 진행 할 수 도 있으나 처리 데이터가 많을 경우 테이블에 Lock이 걸릴 수 있으므로 주의 해야 한다. 그래서는 본인은 Cursor 보다는 임시테이블과 While문을 자주 사용한다.


'SQL > MySQL' 카테고리의 다른 글

[MySql] NULL Function  (0) 2016.10.12
[MySql] Select 된 Rowcount 를 얻는 방법(MSSql의 @@Rowcount)  (0) 2016.08.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함