是否可以从选择语句中创建一个临时(仅会话)表,而不使用create table语句并指定每个列类型?我知道派生表能够做到这一点,但那些是超临时的(仅语句),我想重用。
如果我不需要编写create table命令并保持列列表和类型列表匹配,就可以节省时间。
是否可以从选择语句中创建一个临时(仅会话)表,而不使用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权限。
其他回答
当表包含BLOB/TEXT列时,不支持ENGINE=MEMORY
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
)
它也适用于主键
使用以下语法:
CREATE TEMPORARY TABLE t1 (select * from t2);
引擎必须在选择之前:
CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY
as (select * from table1)