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

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


当前回答

除了psparrow的回答,如果你需要添加一个索引到你的临时表做:

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

它也适用于主键

其他回答

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

引擎必须在选择之前:

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

除了psparrow的回答,如果你需要添加一个索引到你的临时表做:

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

它也适用于主键

根据我的理解,如果你在phpMyAdmin之类的东西中使用它,SELECT语句将在临时表上工作,但在SELECT之后,临时表将消失。这意味着首先设置你想要用它做什么,并且在你的“action”语句(DELETE, UPDATE)更改数据完成之前不要查看任何结果。

使用以下语法:

CREATE TEMPORARY TABLE t1 (select * from t2);