Mysql
 sql >> Database >  >> RDS >> Mysql

Crea una tabella temporanea in MySQL con un indice da una selezione

Ho lottato a lungo con la sintassi corretta per CREATE TEMPORARY TABLE SELECT. Dopo aver capito alcune cose, volevo condividere le risposte con il resto della community.

Le informazioni di base sull'istruzione sono disponibili ai seguenti collegamenti MySQL:

CREA TABELLA SELECT e CREA TABELLA .

A volte può essere scoraggiante interpretare le specifiche. Poiché la maggior parte delle persone impara meglio dagli esempi, condividerò come ho creato una dichiarazione di lavoro e come puoi modificarla in modo che funzioni per te.

  1. Aggiungi più indici

    Questa istruzione mostra come aggiungere più indici (nota che i nomi degli indici - in minuscolo - sono facoltativi):

    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. Aggiungi una nuova chiave primaria :

    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. Crea colonne aggiuntive

    È possibile creare una nuova tabella con più colonne di quelle specificate nell'istruzione SELECT. Specificare la colonna aggiuntiva nella definizione della tabella. Le colonne specificate nella definizione della tabella e non trovate in select saranno le prime colonne della nuova tabella, seguite dalle colonne inserite dall'istruzione 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. Ridefinizione dei tipi di dati per le colonne da SELECT

    È possibile ridefinire il tipo di dati di una colonna SELEZIONATA. Nell'esempio seguente, il tag di colonna è un MEDIUMINT in core.my_big_table e lo sto ridefinendo in un BIGINT in 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. Definizioni avanzate dei campi durante la creazione

    Tutte le consuete definizioni di colonna sono disponibili come quando si crea una tabella normale. Esempio:

    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