Dość długo zmagałem się z właściwą składnią CREATE TEMPORARY TABLE SELECT. Po zrozumieniu kilku rzeczy chciałem podzielić się odpowiedziami z resztą społeczności.
Podstawowe informacje o oświadczeniu są dostępne pod następującymi linkami MySQL:
CREATE TABLE SELECT i CREATE TABLE .
Czasami interpretacja specyfikacji może być zniechęcająca. Ponieważ większość ludzi najlepiej uczy się na przykładach, podzielę się tym, jak stworzyłem oświadczenie robocze i jak możesz je zmodyfikować, aby działały dla Ciebie.
-
Dodaj wiele indeksów
To stwierdzenie pokazuje, jak dodać wiele indeksów (zwróć uwagę, że nazwy indeksów - pisane małymi literami - są opcjonalne):
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
-
Dodaj nowy klucz podstawowy :
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
-
Utwórz dodatkowe kolumny
Możesz utworzyć nową tabelę z większą liczbą kolumn niż określono w instrukcji SELECT. Określ dodatkową kolumnę w definicji tabeli. Kolumny określone w definicji tabeli i nie znalezione w select będą pierwszymi kolumnami w nowej tabeli, a następnie kolumnami wstawionymi przez instrukcję 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
-
Ponowne definiowanie typów danych dla kolumn z SELECT
Możesz przedefiniować typ danych kolumny, która jest WYBIERANA. W poniższym przykładzie tag kolumny to MEDIUMINT w core.my_big_table i zmieniam go na BIGINT w 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
-
Zaawansowane definicje pól podczas tworzenia
Wszystkie zwykłe definicje kolumn są dostępne tak, jak podczas tworzenia normalnej tabeli. Przykład:
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