Dlouho jsem zápasil se správnou syntaxí pro CREATE TEMPORARY TABLE SELECT. Když jsem přišel na pár věcí, chtěl jsem se o odpovědi podělit se zbytkem komunity.
Základní informace o příkazu jsou k dispozici na následujících odkazech MySQL:
VYTVOŘIT VÝBĚR TABULKY a VYTVOŘIT TABULKU .
Občas může být skličující interpretovat specifikaci. Protože většina lidí se nejlépe učí z příkladů, podělím se o to, jak jsem vytvořil pracovní prohlášení a jak jej můžete upravit, aby vám fungovalo.
-
Přidat více indexů
Tento příkaz ukazuje, jak přidat více indexů (všimněte si, že názvy indexů – malými písmeny – jsou volitelné):
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
-
Přidat nový primární klíč :
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
-
Vytvořte další sloupce
Můžete vytvořit novou tabulku s více sloupci, než je uvedeno v příkazu SELECT. Zadejte další sloupec v definici tabulky. Sloupce specifikované v definici tabulky a nenalezené v selectu budou první sloupce v nové tabulce, následované sloupci vloženými příkazem SELECT.
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
-
Předefinování datových typů pro sloupce z SELECT
Můžete předefinovat datový typ sloupce, který se vybírá. V níže uvedeném příkladu je značka sloupce MEDIUMINT v core.my_big_table a já ji předefinuji na BIGINT v 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
-
Pokročilé definice polí během vytváření
Všechny obvyklé definice sloupců jsou k dispozici jako při vytváření normální tabulky. Příklad:
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