Я досить довго боровся з правильним синтаксисом для 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