Mysql
 sql >> Base de données >  >> RDS >> Mysql

Créer une table temporaire dans MySQL avec un index à partir d'un select

J'ai lutté assez longtemps avec la syntaxe appropriée pour CREATE TEMPORARY TABLE SELECT. Après avoir compris certaines choses, je voulais partager les réponses avec le reste de la communauté.

Des informations de base sur la déclaration sont disponibles sur les liens MySQL suivants :

CRÉER UNE SÉLECTION DE TABLE et CRÉER UNE TABLE .

Parfois, il peut être intimidant d'interpréter les spécifications. Étant donné que la plupart des gens apprennent mieux à partir d'exemples, je vais partager comment j'ai créé une déclaration de travail et comment vous pouvez la modifier pour qu'elle fonctionne pour vous.

  1. Ajouter plusieurs index

    Cette déclaration montre comment ajouter plusieurs index (notez que les noms d'index - en minuscules - sont facultatifs) :

    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. Ajouter une nouvelle clé primaire :

    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. Créer des colonnes supplémentaires

    Vous pouvez créer une nouvelle table avec plus de colonnes que celles spécifiées dans l'instruction SELECT. Spécifiez la colonne supplémentaire dans la définition de table. Les colonnes spécifiées dans la définition de table et introuvables dans select seront les premières colonnes de la nouvelle table, suivies des colonnes insérées par l'instruction 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. Redéfinition des types de données pour les colonnes de SELECT

    Vous pouvez redéfinir le type de données d'une colonne en cours de sélection. Dans l'exemple ci-dessous, la balise de colonne est un MEDIUMINT dans core.my_big_table et je la redéfinis en BIGINT dans 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. Définitions de champ avancées lors de la création

    Toutes les définitions de colonne habituelles sont disponibles comme lorsque vous créez une table normale. Exemple :

    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