Question Créez une table temporaire dans une instruction SELECT sans un CREATE TABLE distinct


Est-il possible de créer une table temporaire (session uniquement) à partir d'une instruction select sans utiliser une instruction create table et en spécifiant chaque type de colonne? Je sais que les tables dérivées sont capables de cela, mais celles-ci sont super temporaires (uniquement pour les instructions) et je veux les réutiliser.

Cela me permettrait de gagner du temps si je n'avais pas à écrire une commande de création de table et à conserver la liste des colonnes et la liste de types correspondantes.


426
2018-05-02 16:03


origine


Réponses:


CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)

A partir du manuel trouvé à 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 TEMPORAIRE est visible uniquement pour la session en cours, et est abandonné 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 les unes avec les autres ou avec une table non TEMPORARY existante du 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.


692
2018-05-02 16:11



En plus de psparrow's répondez si vous avez besoin de ajouter un index à votre table temporaire faire:

CREATE TEMPORARY TABLE IF NOT EXISTS 
  temp_table ( INDEX(col_2) ) 
ENGINE=MyISAM 
AS (
  SELECT col_1, coll_2, coll_3
  FROM mytable
)

Ça marche aussi avec PRIMARY KEY


120
2018-06-17 19:43



Utilisez cette syntaxe:

CREATE TEMPORARY TABLE t1 (select * from t2);

55
2017-12-06 21:55



Le moteur doit être avant select:

CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY 
as (select * from table1)

53
2018-02-14 14:02



ENGINE=MEMORY n'est pas supporté lorsque la table contient BLOB/TEXT colonnes


32
2018-02-23 17:36