在SELECT语句中创建一个临时表,不需要单独的CREATE TABLE

是否有可能从一个选择语句中创建一个临时(仅限会话)表,而不使用创建表语句并指定每个列的类型?我知道派生表能够做到这一点,但那些表是超临时的(只限于语句),我想重新使用。

如果我不需要写一个创建表的命令并保持列列表和类型列表的匹配,这将节省时间。

解决办法
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权限。

评论(12)

使用这种语法。

CREATE TEMPORARY TABLE t1 (select * from t2);
评论(1)

发动机必须在选择之前。

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