J'ai lutté pendant un certain temps avec la syntaxe appropriée pour CREATE TEMPORARY TABLE SELECT. Après avoir compris certaines choses, j'ai voulu partager mes réponses avec le reste de la communauté.
Des informations de base sur cette déclaration sont disponibles sur les liens MySQL suivants :
CRÉER UNE TABLE SELECT y CRÉER UNE TABLE .
L'interprétation de la spécification peut parfois être déconcertante. Puisque la plupart des gens apprennent mieux à partir d'exemples, je vais partager la façon dont j'ai créé une déclaration fonctionnelle, et comment vous pouvez la modifier pour qu'elle vous convienne.
-
Ajouter des index multiples
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
-
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
-
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 la table. Les colonnes spécifiées dans la définition de la table et non trouvées dans l'instruction 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
-
Redéfinition des types de données pour les colonnes de SELECT
Vous pouvez redéfinir le type de données d'une colonne faisant l'objet d'une SÉLECTION. Dans l'exemple ci-dessous, la colonne tag 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
-
Définitions avancées des champs lors de la création
Toutes les définitions de colonnes 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