在SELECT语句中创建临时表,而不使用单独的CREATE TABLE

时间:2011-05-02 16:03:03

标签: mysql select temp-tables create-table derived-table

是否可以在不使用create table语句并指定每个列类型的情况下从select语句创建临时(仅会话)表?我知道派生表能够做到这一点,但那些是超临时的(仅限语句),我想重用。

如果我不必编写create table命令并保持列列表和类型列表匹配,那么可以节省时间。

7 个答案:

答案 0 :(得分:748)

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表仅仅对当前会话可见,并且在会话关闭时自动删除。这意味着两个不同的会话可以使用相同的临时表名,而不会相互冲突或与现有的同名非TEMPORARY表冲突。 (在删除临时表之前,将隐藏现有表。)要创建临时表,您必须具有CREATE TEMPORARY TABLES权限。

答案 1 :(得分:130)

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

答案 2 :(得分:60)

使用以下语法:

CREATE TEMPORARY TABLE t1 (select * from t2);

答案 3 :(得分:53)

引擎必须在选择之前:

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

答案 4 :(得分:37)

当表格包含ENGINE=MEMORY / BLOB

时,

TEXT不受支持

答案 5 :(得分:0)

CREATE TEMPORARY TABLE IF NOT EXISTS to_table_name AS (SELECT * FROM from_table_name)

答案 6 :(得分:0)

据我所知,如果您在 phpMyAdmin 之类的东西中使用 SELECT 语句,它可以在临时表上工作,但是在 SELECT 之后,临时表将消失。这意味着首先准确地设置您想用它做什么,并且在更改数据(删除、更新)的“操作”语句完成之前不要查看任何结果。