별도의 CREATE TABLE없이 SELECT 문에서 임시 테이블을 만듭니다.


494

create table 문을 사용하지 않고 각 열 유형을 지정하지 않고 select 문에서 임시 (세션 전용) 테이블을 만들 수 있습니까? 파생 테이블 에서이 기능을 수행 할 수 있지만 임시 테이블 (문장 전용)이므로 재사용하고 싶습니다.

테이블 작성 명령을 작성하지 않고 열 목록과 유형 목록을 일치시키지 않으면 시간이 절약됩니다.

답변:


789
CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)

http://dev.mysql.com/doc/refman/5.7/en/create-table.html에 있는 매뉴얼에서

테이블을 작성할 때 TEMPORARY 키워드를 사용할 수 있습니다. 임시 테이블은 현재 세션에 표시 되고, 자동 삭제 세션이 폐쇄 될 때. 이는 서로 다른 두 개의 세션이 서로 충돌하지 않거나 동일한 이름의 TEMPORARY가 아닌 기존 테이블과 동일한 임시 테이블 이름을 사용할 수 있음을 의미합니다. (기존 테이블은 임시 테이블이 삭제 될 때까지 숨겨집니다.) 임시 테이블을 작성하려면 CREATE TEMPORARY TABLES 권한이 있어야합니다.


8
완전한! 최대 길이가 최적 인 열! 나는 temporary그렇게 단어를 추가했다 create temporary table mytable as select ....
Bryan Field

5
@ imperium2335, 아마도 다음을 시도해야합니다 create table t as select ... limit 0; alter table t engine=memory; insert into t select ..... 또는 "새 테이블의 기본 엔진"을 변경할 수 있습니다. 세션 수준 변수 에서이 작업을 수행 할 수 있다고 생각합니다. 더 좋은 방법은 오른쪽 상단의 질문하기 버튼을 사용하는 것입니다.
Bryan Field

10
열 이름과 유형에 대해 알 필요가 없으므로 테이블 작성을 사용하지 않으려는 질문자의 이유입니다.
psparrow

30
당신은 다음과 같이 사용할 수 있습니다 CREATE TEMPORARY TABLE IF NOT EXISTS table2 LIKE table1당신은 데이터, 단지 구조를 복사 할 해달라고하면
dzona

1
세션이란 무엇입니까?
Saurabh Chandra Patel

137

임시 테이블에 인덱스추가 해야하는 경우 psparrow의 답변 외에도 다음을 수행하십시오.

CREATE TEMPORARY TABLE IF NOT EXISTS 
  temp_table ( INDEX(col_2) ) 
ENGINE=MyISAM 
AS (
  SELECT col_1, coll_2, coll_3
  FROM mytable
)

그것은 또한 작동 PRIMARY KEY


3
Engine = Memory를 이러한 구문과 함께 사용할 수 있습니까?
DarkSide

6
@DarkSide 예 ENGINE = MEMORY도 사용할 수 있습니다. 다음 예를 참조하십시오. blog.cnizz.com/2010/11/24/…
RafaSashi

1
MyISAM과 메모리 엔진의 차이점은 무엇입니까? 기억의 이점은 무엇입니까?
yeahman

63

이 구문을 사용하십시오.

CREATE TEMPORARY TABLE t1 (select * from t2);

1
그것은 복사 데이터에 더 객관적입니다! 큰!
Rafael Gomes Francisco

54

선택하기 전에 엔진이 있어야합니다 :

CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY 
as (select * from table1)

39

ENGINE=MEMORY테이블에 BLOB/ TEXT열이 포함 된 경우 지원되지 않습니다


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.