Est-il possible de créer une table temporaire (session uniquement) à partir d'une instruction select sans utiliser d'instruction create table et spécifier chaque type de colonne? Je sais que les tables dérivées sont capables de cela, mais celles-ci sont super-temporaires (instruction-only) et je veux les réutiliser.
Cela me ferait gagner du temps si je n'avais pas à écrire une commande create table et à conserver la correspondance entre la liste de colonnes et le type de liste.
CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)
Extrait du manuel trouvé à l'adresse http://dev.mysql.com/doc/refman/5.7/en/create-table.html
Vous pouvez utiliser le mot clé TEMPORARY lors de la création d'une table. Une table TEMPORARY est uniquement visible pour la session en cours et est supprimée automatiquement lorsque la session est fermée. Cela signifie que deux sessions différentes peuvent utiliser le même nom de table temporaire sans entrer en conflit ou avec une table non TEMPORARY existante portant le même nom. (La table existante est masquée jusqu'à ce que la table temporaire soit supprimée.) Pour créer des tables temporaires, vous devez disposer du privilège CREATE TEMPORARY TABLES.
En plus de la réponse de psparrow si vous avez besoin de ajouter un index à votre table temporaire, procédez comme suit:
CREATE TEMPORARY TABLE IF NOT EXISTS
temp_table ( INDEX(col_2) )
ENGINE=MyISAM
AS (
SELECT col_1, coll_2, coll_3
FROM mytable
)
Cela fonctionne aussi avec PRIMARY KEY
Utilisez cette syntaxe:
CREATE TEMPORARY TABLE t1 (select * from t2);
Le moteur doit être avant de sélectionner:
CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY
as (select * from table1)
ENGINE=MEMORY
n'est pas pris en charge lorsque la table contient BLOB
/TEXT
colonnes.