Jag brottades ett tag med den rätta syntaxen för CREATE TEMPORARY TABLE SELECT. Efter att ha kommit på några saker ville jag dela svaren med resten av communityn.
Grundläggande information om uttalandet finns på följande MySQL-länkar:
SKAPA TABELLVAL och SKAPA TABELL .
Ibland kan det vara skrämmande att tolka specen. Eftersom de flesta lär sig bäst av exempel kommer jag att dela med mig av hur jag har skapat ett fungerande uttalande och hur du kan ändra det så att det fungerar för dig.
-
Lägg till flera index
Det här uttalandet visar hur man lägger till flera index (observera att indexnamn - med små bokstäver - är valfria):
CREATE TEMPORARY TABLE core.my_tmp_table (INDEX my_index_name (tag, time), UNIQUE my_unique_index_name (order_number)) SELECT * FROM core.my_big_table WHERE my_val = 1
-
Lägg till en ny primärnyckel :
CREATE TEMPORARY TABLE core.my_tmp_table (PRIMARY KEY my_pkey (order_number), INDEX cmpd_key (user_id, time)) SELECT * FROM core.my_big_table
-
Skapa ytterligare kolumner
Du kan skapa en ny tabell med fler kolumner än vad som anges i SELECT-satsen. Ange den extra kolumnen i tabelldefinitionen. Kolumner som anges i tabelldefinitionen och som inte finns i select kommer att vara första kolumner i den nya tabellen, följt av kolumnerna som infogas av SELECT-satsen.
CREATE TEMPORARY TABLE core.my_tmp_table (my_new_id BIGINT NOT NULL AUTO_INCREMENT, PRIMARY KEY my_pkey (my_new_id), INDEX my_unique_index_name (invoice_number)) SELECT * FROM core.my_big_table
-
Omdefinierar datatyper för kolumnerna från SELECT
Du kan omdefiniera datatypen för en kolumn som väljs. I exemplet nedan är kolumntaggen en MEDIUMINT i core.my_big_table och jag omdefinierar den till en BIGINT i core.my_tmp_table.
CREATE TEMPORARY TABLE core.my_tmp_table (tag BIGINT, my_time DATETIME, INDEX my_unique_index_name (tag) ) SELECT * FROM core.my_big_table
-
Avancerade fältdefinitioner under skapande
Alla vanliga kolumndefinitioner är tillgängliga som när du skapar en normal tabell. Exempel:
CREATE TEMPORARY TABLE core.my_tmp_table (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, value BIGINT UNSIGNED NOT NULL DEFAULT 0 UNIQUE, location VARCHAR(20) DEFAULT "NEEDS TO BE SET", country CHAR(2) DEFAULT "XX" COMMENT "Two-letter country code", INDEX my_index_name (location)) ENGINE=MyISAM SELECT * FROM core.my_big_table