2011-05-02 72 views

回答

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

+8

完美!具有最佳最大长度和所有列的!我添加了“临时”这个词,所以“创建临时表mytable作为select ...”。 – 2011-05-02 16:36:34

+0

你会如何指定该表的引擎?例如MEMORY 我试过ENGINE = MEMORY,但它给我一个语法错误。 – imperium2335 2012-06-26 06:57:00

+5

@ imperium2335,也许你应该试试以下内容:'create table t as select ... limit 0;改变表t引擎=内存;插入到t选择...'。或者,也许你可以改变“新表的默认引擎”。我想这可以在会话级别变量中完成。更好的是,使用右上方的Ask Question按钮。 – 2012-06-29 16:05:50

51

使用此语法:

CREATE TEMPORARY TABLE t1 (select * from t2); 
+0

这对复制数据更为客观!大! – 2017-02-23 20:33:39

49

发动机前必须选择:

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

ENGINE=MEMORY当表包含BLOB/TEXT

115

除了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

+2

Can Engine = Memory也可以使用这种语法吗? – DarkSide 2013-06-25 21:59:17

+5

@DarkSide是也可以使用ENGINE = MEMORY。请参阅以下示例:http://blog.cnizz.com/2010/11/24/mysql-temporary-tables-example-optimizing-applications-with-temp-tables/ – RafaSashi 2013-07-26 10:30:34

+0

真的很有用的答案,谢谢。 – 2013-10-31 19:34:13

相关问题