Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Crie uma tabela temporária no MySQL com um índice de um select


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ê.

  1. 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
    

  2. 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
    

  3. 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
    

  4. 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
    

  5. 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