MySQL에서 SELECT 문을 활용해 별도의 CREATE TABLE 문 없이 임시 테이블을 만들려면 TEMPORARY 키워드를 사용하면 됩니다.
임시 테이블(Temporary Table)의 특징
임시 테이블은 현재 세션(session)에서만 보이며, 세션이 종료되면 자동으로 삭제됩니다. 또한 서로 다른 두 세션이 같은 이름의 임시 테이블을 각각 사용할 수 있다는 점도 유용합니다.
1. 원본 테이블 생성하기
먼저 예제에 사용할 일반 테이블을 생성합니다.
mysql> create table MyTableDemo
-> (
-> id int,
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.69 sec)
2. 데이터 삽입하기
테스트용 레코드를 몇 개 삽입합니다.
mysql> insert into MyTableDemo values(1,'John'); Query OK, 1 row affected (0.18 sec) mysql> insert into MyTableDemo values(2,'Carol'); Query OK, 1 row affected (0.13 sec) mysql> insert into MyTableDemo values(3,'Bob'); Query OK, 1 row affected (0.12 sec)
3. 전체 레코드 조회하기
삽입된 모든 데이터를 확인해 보겠습니다.
mysql> select * from MyTableDemo;
실행 결과는 다음과 같습니다.
+------+-------+ | id | Name | +------+-------+ | 1 | John | | 2 | Carol | | 3 | Bob | +------+-------+ 3 rows in set (0.00 sec)
4. 임시 테이블 생성 문법
SELECT 결과를 그대로 임시 테이블로 만드는 기본 문법은 아래와 같습니다.
CREATE TEMPORARY TABLE IF NOT EXISTS yourTemporaryTableName AS (SELECT * FROM yourTableName);
IF NOT EXISTS 옵션을 함께 사용하면 동일한 이름의 임시 테이블이 이미 존재할 때 발생하는 오류를 방지할 수 있습니다.
5. 실제 쿼리 실행 예시
위 문법을 실제로 적용해 보겠습니다.
mysql> CREATE TEMPORARY TABLE IF NOT EXISTS MyTemporaryTableDemo AS (SELECT * FROM MyTableDemo); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0
6. 데이터 복사 확인하기
모든 레코드가 정상적으로 복사되었는지 확인합니다.
mysql> select * from MyTemporaryTableDemo;
실행 결과는 다음과 같습니다.
+------+-------+ | id | Name | +------+-------+ | 1 | John | | 2 | Carol | | 3 | Bob | +------+-------+ 3 rows in set (0.00 sec)
정리
이처럼 CREATE TEMPORARY TABLE ... AS SELECT 구문을 사용하면 복잡한 테이블 정의 과정 없이, 기존 테이블의 구조와 데이터를 한 번에 복사한 임시 테이블을 손쉽게 만들 수 있습니다. 복잡한 조인 결과를 잠시 저장해 두고 분석할 때 특히 유용합니다.