Борих се доста време с правилния синтаксис за CREATE TEMPORARY TABLE SELECT. След като разбрах няколко неща, исках да споделя отговорите с останалата част от общността.
Основна информация за изявлението е достъпна на следните връзки към MySQL:
СЪЗДАВАНЕ НА ИЗБОР НА ТАБЛИЦА и СЪЗДАВАНЕ НА ТАБЛИЦА .
Понякога може да бъде обезсърчително да се тълкува спецификацията. Тъй като повечето хора се учат най-добре от примери, ще споделя как съм създал работещ израз и как можете да го модифицирате, за да работи за вас.
-
Добавяне на множество индекси
Това изявление показва как да добавите множество индекси (обърнете внимание, че имената на индекси - с малки букви - не са задължителни):
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
-
Добавяне на нов първичен ключ :
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
-
Създайте допълнителни колони
Можете да създадете нова таблица с повече колони, отколкото са посочени в оператора SELECT. Посочете допълнителната колона в дефиницията на таблицата. Колоните, посочени в дефиницията на таблицата и неоткрити в select, ще бъдат първите колони в новата таблица, последвани от колоните, вмъкнати от оператора 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
-
Предефиниране на типове данни за колоните от SELECT
Можете да предефинирате типа данни на колона, която се ИЗБИРА. В примера по-долу маркерът на колоната е MEDIUMINT в core.my_big_table и аз го предефинирам до BIGINT в 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
-
Разширени дефиниции на полета по време на създаване
Всички обичайни дефиниции на колони са налични, както когато създавате нормална таблица. Пример:
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