Eu lutei bastante com a sintaxe adequada para CREATE TEMPORARY TABLE SELECT. Tendo descoberto algumas coisas, eu queria compartilhar as respostas com o resto da comunidade.
Informações básicas sobre a instrução estão disponíveis nos seguintes links do MySQL:
CREATE TABLE SELECT e CREATE TABLE .
Às vezes, pode ser assustador interpretar a especificação. Como a maioria das pessoas aprende melhor com exemplos, vou compartilhar como criei uma declaração de trabalho e como você pode modificá-la para funcionar para você.
-
Adicionar vários índices
Esta instrução mostra como adicionar vários índices (observe que os nomes dos índices - em letras minúsculas - são opcionais):
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
-
Adicionar uma nova chave primária :
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
-
Crie colunas adicionais
Você pode criar uma nova tabela com mais colunas do que as especificadas na instrução SELECT. Especifique a coluna adicional na definição da tabela. As colunas especificadas na definição da tabela e não encontradas em select serão as primeiras colunas na nova tabela, seguidas pelas colunas inseridas pela instrução 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
-
Redefinindo tipos de dados para as colunas de SELECT
Você pode redefinir o tipo de dados de uma coluna que está sendo selecionada. No exemplo abaixo, a tag de coluna é um MEDIUMINT em core.my_big_table e estou redefinindo-o como um BIGINT em 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
-
Definições de campo avançadas durante a criação
Todas as definições de coluna usuais estão disponíveis como quando você cria uma tabela normal. Exemplo:
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