在没有单独的CREATE TABLE的情况下在SELECT语句中创建一个临时表

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

如果我不需要编写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表仅对当前会话可见 ,并在会话关闭时自动删除 。 这意味着两个不同的会话可以使用相同的临时表名称而不会相互冲突,或与现有的非TEMPORARY同名表相冲突。 (直到临时表被删除时,现有表才会隐藏。)要创建临时表,您必须具有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);
链接地址: http://www.djcxy.com/p/85093.html

上一篇: Create a temporary table in a SELECT statement without a separate CREATE TABLE

下一篇: Ctrl + Shift + L not recognized by visual studio 2017