2011-05-02 55 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

相關問題