在不使用create table语句并指定每个列类型的情况下,是否可以从select语句创建一个临时(仅在会话期间存在)表?我知道派生表是有这个能力的,但它们是超级临时的(仅限于语句),我希望能够重复使用。
如果我不必编写create table命令并保持列列表和类型列表匹配,则可以节省时间。
在不使用create table语句并指定每个列类型的情况下,是否可以从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表只对当前会话可见,并在会话关闭时自动删除。这意味着两个不同的会话可以使用相同的临时表名而不会互相冲突或与同名的非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);
引擎必须放在选择器之前:
CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY
as (select * from table1)
ENGINE=MEMORY
不支持包含 BLOB
/TEXT
列的表格
CREATE TEMPORARY TABLE IF NOT EXISTS table2 LIKE table1
。 - dzona