在SELECT语句中创build一个临时表,而不用单独的CREATE TABLE

是否有可能从select语句创build一个临时(仅会话)表而不使用create table语句并指定每个列的types? 我知道派生表是有能力的,但这些是超临时的(只有声明),我想重新使用。

如果我不需要编写一个create table命令并保持列表和types列表匹配,这将节省时间。

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

请参阅http://dev.mysql.com/doc/refman/5.7/en/create-table.html上的手册;

创build表格时可以使用TEMPORARY关键字。 TEMPORARY表仅对当前会话可见 ,并在会话closures时自动删除 。 这意味着两个不同的会话可以使用相同的临时表名称,而不会相互冲突,也不会与现有的具有相同名称的非TEMPORARY表冲突。 (现有表在隐藏到临时表被删除之前。)要创build临时表,您必须具有CREATE TEMPORARY TABLES特权。

除了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

使用这个语法:

 CREATE TEMPORARY TABLE t1 (select * from t2); 

引擎必须在select之前:

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

当表包含BLOB / TEXT列时,不支持ENGINE=MEMORY