티스토리 뷰
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
- catch
- 파일
- select
- InputStreamReader
- InputStreamWriter
- FOUND_ROW
- BufferedReader
- syntax
- 라이브아카데미
- IF
- file
- JSP
- 소스코드
- isDirectory
- 자바
- java
- reflection
- IO
- 임시파일
- choose
- jstl
- FileInputStream
- remove
- highlight.js
- BufferedWriter
- foreach
- Rowcount
- Set
- Field
- forToken
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |