是否可以從select語句創建臨時(僅會話)表而不使用create table語句並指定每個列類型?我知道派生表能夠做到這一點,但這些都是超臨時的(僅限聲明),我想重新使用。在沒有單獨的CREATE TABLE的情況下在SELECT語句中創建臨時表
如果我不需要編寫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特權。
使用此語法:
CREATE TEMPORARY TABLE t1 (select * from t2);
這對複製數據更爲客觀!大! – 2017-02-23 20:33:39
發動機前必須選擇:
CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY
as (select * from table1)
ENGINE=MEMORY
當表包含BLOB
/TEXT
列
除了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
完美!具有最佳最大長度和所有列的!我添加了「臨時」這個詞,所以「創建臨時表mytable作爲select ...」。 – 2011-05-02 16:36:34
你會如何指定該表的引擎?例如MEMORY 我試過ENGINE = MEMORY,但它給我一個語法錯誤。 – imperium2335 2012-06-26 06:57:00
@ imperium2335,也許你應該試試以下內容:'create table t as select ... limit 0;改變表t引擎=內存;插入到t選擇...'。或者,也許你可以改變「新表的默認引擎」。我想這可以在會話級別變量中完成。更好的是,使用右上方的Ask Question按鈕。 – 2012-06-29 16:05:50