538

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

如果我不必编写创建表命令并保持列列表和类型列表匹配,这将节省时间。

4

6 回答 6

858
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 特权。

于 2011-05-02T16:11:38.920 回答
149

如果您需要向临时表添加索引,除了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

于 2013-06-17T19:43:34.563 回答
64

使用此语法:

CREATE TEMPORARY TABLE t1 (select * from t2);
于 2012-12-06T21:55:48.517 回答
57

引擎必须在选择之前:

CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY 
as (select * from table1)
于 2013-02-14T14:02:25.173 回答
41

ENGINE=MEMORYBLOB表包含/TEXT列时不支持

于 2013-02-23T17:36:02.887 回答
1

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

于 2021-04-15T12:19:16.623 回答