- 1 1. (Débutant) Qu’est‑ce qu’une table temporaire MySQL ? Différences avec les tables normales
- 2 2. (Avec du code d’exemple) Comment créer une table temporaire dans MySQL
- 2.1 Introduction
- 2.2 2-1. Syntaxe de base pour une table temporaire
- 2.3 2-2. Créer une table temporaire à partir de données d’une table existante
- 2.4 2-3. Comment vérifier les données d’une table temporaire
- 2.5 2-4. Insérer des données dans une table temporaire
- 2.6 2-5. Remarques lors de la création de tables temporaires
- 2.7 Résumé
- 3 3. Comment manipuler les données dans une table temporaire MySQL (INSERT, UPDATE, DELETE)
- 4 4. Les tables temporaires MySQL sont-elles supprimées automatiquement ? Comment les supprimer manuellement
- 5 5. 5 cas d’utilisation pratiques des tables temporaires MySQL (y compris l’optimisation des performances)
- 5.1 Introduction
- 5.2 5-1. Optimiser les performances des requêtes (Réduire la surcharge des JOIN)
- 5.3 5-2. Traitement d’agrégation temporaire
- 5.4 5-3. Stocker des données intermédiaires pour le traitement par lots
- 5.5 5-4. Gestion des données temporaires par utilisateur
- 5.6 5-5. Choisir entre les tables temporaires et les vues
- 5.7 Résumé
- 6 6. Trois précautions importantes lors de l’utilisation sécurisée des tables temporaires MySQL
- 7 7. 10 Questions fréquemment posées (FAQ) sur les tables temporaires MySQL
- 8 8. Résumé : Points clés pour utiliser efficacement les tables temporaires MySQL
- 8.1 Introduction
- 8.2 8-1. Concepts de base des tables temporaires MySQL
- 8.3 8-2. Avantages des tables temporaires
- 8.4 8-3. Inconvénients et précautions
- 8.5 8-4. Meilleures pratiques pour une utilisation sécurisée
- 8.6 8-5. Tables temporaires vs alternatives (vues et CTE)
- 8.7 Résumé
1. (Débutant) Qu’est‑ce qu’une table temporaire MySQL ? Différences avec les tables normales
Introduction
Lors de la gestion de données avec MySQL, il arrive parfois que vous deviez stocker des données temporairement. Par exemple, lors du traitement d’un jeu de données volumineux, vous pouvez vouloir enregistrer des résultats intermédiaires pendant que vous travaillez. Dans ces cas, une table temporaire (Temporary Table) est très utile.
Dans cet article, nous expliquerons le mécanisme de base des tables temporaires MySQL et comment elles diffèrent des tables normales.
1-1. Qu’est‑ce qu’une table temporaire ?
Une table temporaire est une table spéciale qui n’existe que pendant une session de base de données (connexion).
Contrairement à une table normale, elle est automatiquement supprimée à la fin de la session, ce qui la rend idéale pour stocker des données temporaires.
Principales caractéristiques des tables temporaires
- Isolée par session : une table temporaire ne peut être accédée que dans la session qui l’a créée. Les autres sessions ne peuvent pas y faire référence.
- Supprimée automatiquement à la fin de la session : les tables temporaires disparaissent automatiquement lorsque la session se termine, même si vous ne les supprimez pas explicitement.
- Vous pouvez créer des tables temporaires avec le même nom : contrairement aux tables normales, il est possible de créer des tables temporaires portant le même nom dans des sessions différentes.
1-2. Différences avec les tables normales
Les tables temporaires et les tables normales diffèrent de la manière suivante.
| Comparison | Temporary Table | Regular Table |
|---|---|---|
| Data retention | Valid only during the session (automatically removed) | Stored permanently |
| Access scope | Only within the session that created it | Accessible to all users (subject to privileges) |
| Name conflicts | You can create temporary tables with the same name | You cannot create another table with the same name in the same database |
| Required privileges | Requires the CREATE TEMPORARY TABLES privilege | Requires the standard CREATE TABLE privilege |
| Indexes | Supported | Supported |
| Performance | Often created in memory and can be fast | Stored on disk; performance can degrade as data grows |
Laquelle devez‑vous utiliser ?
- Si vous n’avez besoin des données que temporairement et qu’elles peuvent être jetées après le traitement → Table temporaire
- Si vous souhaitez conserver les données de façon permanente et les réutiliser plus tard → Table normale
Par exemple, les tables temporaires sont très utiles pour des tâches comme l’analyse de données à grande échelle ou l’agrégation temporaire.
1-3. Quand avez‑vous besoin d’une table temporaire
Les tables temporaires MySQL sont particulièrement utiles dans les situations suivantes.
1) Améliorer les performances des requêtes
Par exemple, lors de l’exécution d’opérations JOIN complexes, vous pouvez réduire le temps de traitement en créant une table temporaire pour stocker à l’avance les données intermédiaires.
Exemple : Réduire le coût du JOIN
CREATE TEMPORARY TABLE temp_users AS
SELECT id, name FROM users WHERE status = 'active';
En stockant d’abord les données cibles dans une table temporaire, puis en exécutant le JOIN, les performances peuvent s’améliorer.
2) Stocker des données temporairement
Les tables temporaires sont également utiles lorsqu’une application doit gérer des données de façon temporaire.
Par exemple, vous pouvez enregistrer les données recherchées par un utilisateur dans une table temporaire et les faire supprimer à la fin de la session.
3) Tables intermédiaires pour le traitement par lots
Lors du traitement de grandes quantités de données, l’utilisation de tables temporaires comme tables intermédiaires peut améliorer la stabilité du processus.
1-4. Limitations des tables temporaires
Les tables temporaires sont pratiques, mais elles présentent quelques limitations.
1) Suppression automatique à la fin de la session
Comme les tables temporaires sont supprimées automatiquement à la fin de la session, elles ne conviennent pas au stockage permanent de données.
2) Non accessibles depuis d’autres sessions
Les tables temporaires ne peuvent être utilisées que dans la session qui les a créées, elles ne peuvent donc pas être partagées avec d’autres utilisateurs ou processus.
3) Conflit potentiel avec une table normale du même nom
Si une table normale portant le même nom existe, la création d’une table temporaire avec ce nom rendra la table normale temporairement invisible, il faut donc faire attention.
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(255));
SELECT * FROM users; -- This query references the temporary table data
Comme indiqué ci‑dessus, une fois qu’une table temporaire est créée, vous ne pouvez pas accéder à la table normale du même nom tant que la table temporaire n’est pas supprimée. Choisissez soigneusement les noms de tables.
Résumé
Les tables temporaires MySQL sont une fonctionnalité pratique pour le stockage temporaire de données et l’optimisation des requêtes.
En comprenant leurs différences avec les tables normales et en les utilisant de manière appropriée, vous pouvez traiter les données plus efficacement.
✔ Récapitulatif rapide
- Les tables temporaires sont automatiquement supprimées à la fin de la session
- Contrairement aux tables normales, elles sont isolées par session
- Idéales pour le stockage temporaire et l’amélioration des performances des requêtes
- Inadaptées au stockage permanent car les données disparaissent à la fin de la session
- Inaccessibles depuis d’autres sessions, et peuvent entrer en conflit avec des tables normales portant le même nom
2. (Avec du code d’exemple) Comment créer une table temporaire dans MySQL
Introduction
Dans la section précédente, nous avons expliqué le concept de base des tables temporaires et comment elles diffèrent des tables normales.
Dans cette section, nous allons parcourir la création d’une table temporaire et la façon de travailler avec les données qu’elle contient.
Créer une table temporaire est simple, mais si vous n’utilisez pas la syntaxe correcte, elle peut ne pas se comporter comme prévu. Cette section explique en détail la syntaxe de base, la création à partir d’une table existante et comment vérifier les tables temporaires.
2-1. Syntaxe de base pour une table temporaire
Pour créer une table temporaire, utilisez l’instruction CREATE TEMPORARY TABLE.
Syntaxe de base
CREATE TEMPORARY TABLE table_name (
column_name data_type [constraints],
column_name data_type [constraints],
...
);
La syntaxe est presque identique à CREATE TABLE, mais l’ajout de TEMPORARY en fait une table temporaire.
Exemple : Stocker les informations d’utilisateur dans une table temporaire
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Cette table temp_users est valide uniquement pendant la session en cours et est automatiquement supprimée à la fin de la session.
2-2. Créer une table temporaire à partir de données d’une table existante
Vous pouvez également créer une table temporaire à partir des données d’une table existante.
Syntaxe
CREATE TEMPORARY TABLE temp_table_name AS
SELECT * FROM existing_table WHERE condition;
Exemple : Stocker uniquement les utilisateurs actifs dans une table temporaire
CREATE TEMPORARY TABLE active_users AS
SELECT id, name, email FROM users WHERE status = 'active';
Cette méthode extrait uniquement les utilisateurs dont status = 'active' de la table users et les stocke dans une nouvelle table temporaire nommée active_users.
Points clés
- Copie les données d’une table existante telles quelles
- Les types de colonnes sont définis automatiquement
- Les index ne sont pas copiés, ajoutez‑les explicitement si nécessaire
2-3. Comment vérifier les données d’une table temporaire
Lister les tables
SHOW TABLES;
Cependant, une table temporaire n’apparaîtra pas dans la liste obtenue avec un SHOW TABLES normal.
Vérifier la structure d’une table temporaire
DESC temp_users;
or
SHOW CREATE TABLE temp_users;
Cela vous permet de vérifier la structure des colonnes et les contraintes de la table temporaire.
2-4. Insérer des données dans une table temporaire
Insérer des données dans une table temporaire est identique à le faire dans une table normale.
Insérer des données
INSERT INTO temp_users (name, email) VALUES
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');
Vérifier les données
SELECT * FROM temp_users;
Cela confirme que les données ont été stockées dans la table temporaire.
2-5. Remarques lors de la création de tables temporaires
1) Faites attention aux conflits de noms de tables
Si vous créez une table temporaire portant le même nom qu’une table normale, la table temporaire prend le dessus, et la table normale devient temporairement inaccessible.
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
SELECT * FROM users; -- This returns data from the temporary table
Pour cette raison, il est recommandé d’utiliser un préfixe tel que « temp_ » pour les noms de tables temporaires.
2) Les index ne sont pas hérités automatiquement
Lorsque vous copiez des données d’une table existante, les index ne sont pas appliqués automatiquement.
Si nécessaire, vous devez ajouter les index explicitement.
ALTER TABLE temp_users ADD INDEX (email);
3) Vous avez besoin du privilège pour créer des tables temporaires
Pour créer une table temporaire, vous avez besoin du privilège CREATE TEMPORARY TABLES.
GRANT CREATE TEMPORARY TABLES ON database_name.* TO 'user'@'localhost';
Sans ce privilège, vous ne pouvez pas créer de tables temporaires.
Résumé
Dans cette section, nous avons expliqué comment créer des tables temporaires.
✔ Récapitulatif rapide
- Créez une table temporaire avec
CREATE TEMPORARY TABLE - Vous pouvez également en créer une en copiant des données d’une table existante
- Supprimée automatiquement lorsque la session se termine
- Les index ne sont pas appliqués automatiquement — soyez prudent
- Utilisez un préfixe comme “temp_” pour éviter les conflits de noms
- Vous avez besoin du privilège approprié (
CREATE TEMPORARY TABLES)
3. Comment manipuler les données dans une table temporaire MySQL (INSERT, UPDATE, DELETE)
Introduction
Dans la section précédente, nous avons expliqué comment créer une table temporaire dans MySQL.
Dans cette section, nous expliquerons comment insérer, mettre à jour et supprimer des données dans une table temporaire en utilisant des commandes SQL spécifiques.
Les tables temporaires supportent les mêmes opérations de données que les tables régulières,
mais il y a quelques notes importantes à garder à l’esprit, que nous couvrirons également.
3-1. Insérer des données dans une table temporaire (INSERT)
Pour ajouter des données à une table temporaire, utilisez l’instruction INSERT INTO, tout comme avec une table régulière.
Syntaxe de base
INSERT INTO temp_table_name (column1, column2, ...)
VALUES (value1, value2, ...);
Exemple : Ajouter des informations utilisateur
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO temp_users (name, email)
VALUES
('Taro Tanaka', 'tanaka@example.com'),
('Hanako Sato', 'sato@example.com');
Insérer des données existantes en utilisant INSERT…SELECT
Vous pouvez également extraire des données d’une table existante et les insérer dans une table temporaire.
INSERT INTO temp_users (id, name, email)
SELECT id, name, email FROM users WHERE status = 'active';
Cette méthode vous permet de stocker uniquement les utilisateurs actifs dans une table temporaire.
3-2. Mettre à jour des données dans une table temporaire (UPDATE)
Pour modifier des données dans une table temporaire, utilisez l’instruction UPDATE.
Syntaxe de base
UPDATE temp_table_name
SET column_name = value
WHERE condition;
Exemple : Mettre à jour le nom d’un utilisateur
UPDATE temp_users
SET name = 'Ichiro Tanaka'
WHERE email = 'tanaka@example.com';
Mise à jour en masse pour les lignes correspondant à une condition
Par exemple, si vous voulez changer les adresses e-mail sous un domaine spécifique en example.jp, vous pouvez écrire :
UPDATE temp_users
SET email = REPLACE(email, 'example.com', 'example.jp')
WHERE email LIKE '%@example.com';
3-3. Supprimer des données d’une table temporaire (DELETE)
Pour supprimer des données, utilisez l’instruction DELETE.
Syntaxe de base
DELETE FROM temp_table_name WHERE condition;
Exemple : Supprimer les données d’un utilisateur spécifique
DELETE FROM temp_users WHERE email = 'tanaka@example.com';
Supprimer toutes les lignes (différence avec TRUNCATE)
Si vous voulez supprimer toutes les lignes, vous pouvez écrire :
DELETE FROM temp_users;
En revanche, pour les tables régulières, vous pouvez souvent supprimer toutes les lignes plus rapidement en utilisant TRUNCATE TABLE. Cependant, vous ne pouvez pas utiliser TRUNCATE sur une table temporaire dans MySQL.
TRUNCATE TABLE temp_users; -- Error (cannot be used on temporary tables in MySQL)
Par conséquent, pour supprimer toutes les lignes d’une table temporaire, vous devez utiliser DELETE.
3-4. Notes lors de la manipulation de données dans une table temporaire
1) Les données disparaissent lorsque la session se termine
Une table temporaire est supprimée automatiquement lorsque la session (connexion) se termine,
elle n’est donc pas adaptée aux cas d’utilisation qui nécessitent un stockage de données persistant.
2) Non accessible depuis d’autres sessions
Une table temporaire n’est valide que dans la session qui l’a créée et ne peut pas être accédée depuis d’autres sessions.
SELECT * FROM temp_users;
Si vous exécutez ce SQL dans une autre session, vous obtiendrez l’erreur « Table ‘temp_users’ n’existe pas ».
3) Les index sur les tables temporaires ne sont pas appliqués automatiquement
Si vous créez une table en utilisant CREATE TEMPORARY TABLE ... AS SELECT ...,
les index de la table d’origine ne sont pas hérités. Si nécessaire, ajoutez les index manuellement en utilisant ALTER TABLE.
ALTER TABLE temp_users ADD INDEX (email);
Résumé
Dans cette section, nous avons couvert la manipulation de données (INSERT, UPDATE, DELETE) pour les tables temporaires.
✔ Récapitulatif rapide
- Utilisez INSERT pour ajouter des données (
INSERT INTO ... VALUES/INSERT INTO ... SELECT) - Utilisez UPDATE pour modifier des données (mises à jour conditionnelles et utilisation de
REPLACE()) - Utilisez DELETE pour supprimer des données (
DELETE FROM ... WHERE;TRUNCATEn’est pas autorisé) - La table temporaire est supprimée lorsque la session se termine
- Non accessible depuis d’autres sessions
- Les index ne sont pas hérités automatiquement ; ajoutez-les manuellement si nécessaire
4. Les tables temporaires MySQL sont-elles supprimées automatiquement ? Comment les supprimer manuellement
Introduction
Contrairement aux tables normales, une table temporaire MySQL (Temporary Table) est automatiquement supprimée lorsque la session se termine. Cependant, il existe des cas où vous pouvez avoir besoin de la supprimer manuellement.
Dans cette section, nous expliquons comment fonctionne la suppression automatique et comment supprimer manuellement les tables temporaires en détail.
4-1. Comment fonctionne la suppression automatique des tables temporaires
1) Suppression automatique à la fin de la session
Une table temporaire MySQL est automatiquement supprimée lorsque la session (connexion à la base de données) qui l’a créée se termine.
À cause de cela, vous n’avez généralement pas besoin de la supprimer manuellement.
Exemple : Suppression automatique à la fin de la session
-- Create a temporary table in a new session
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
-- Insert data
INSERT INTO temp_users (name, email) VALUES ('Taro Tanaka', 'tanaka@example.com');
-- End the session (disconnect the MySQL client)
EXIT;
À ce stade, la table temporaire temp_users est automatiquement supprimée.
2) La table temporaire reste tant que la session continue
Parce que les tables temporaires sont gérées par session, elles ne sont pas supprimées tant que la session reste ouverte.
SELECT * FROM temp_users; -- Data can be retrieved if the session is still active
En d’autres termes, la table temporaire reste en mémoire jusqu’à ce que vous fermiez le client MySQL (ou que le programme se déconnecte).
4-2. Comment supprimer manuellement une table temporaire
Vous pouvez également supprimer manuellement les tables temporaires.
Dans MySQL, utilisez DROP TEMPORARY TABLE pour supprimer une table temporaire.
1) Utiliser DROP TEMPORARY TABLE
DROP TEMPORARY TABLE temp_users;
Cela supprime immédiatement la table temporaire temp_users.
2) Ajouter IF EXISTS pour éviter les erreurs
Si la table n’existe pas, vous pouvez utiliser IF EXISTS pour éviter une erreur.
DROP TEMPORARY TABLE IF EXISTS temp_users;
Cette syntaxe empêche les erreurs même si la table n’existe pas.
3) Différent d’un DROP TABLE normal
Si vous essayez de supprimer une table temporaire en utilisant un DROP TABLE normal, vous pouvez voir une erreur comme celle-ci :
DROP TABLE temp_users;
Erreur :
ERROR 1051 (42S02): Unknown table 'temp_users'
Parce que MySQL gère séparément les tables normales et les tables temporaires, vous devez utiliser DROP TEMPORARY TABLE lors de la suppression d’une table temporaire.
4-3. Comment confirmer qu’une table temporaire a été supprimée
1) Vous ne pouvez pas confirmer avec SHOW TABLES
Une table temporaire n’apparaîtra pas dans le résultat de SHOW TABLES.
SHOW TABLES;
→ Les tables temporaires ne sont pas listées
2) Confirmer en utilisant INFORMATION_SCHEMA
Vous pouvez vérifier si une table temporaire existe en interrogeant INFORMATION_SCHEMA.
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'temp_users';
Si cette requête renvoie un résultat, cela indique que la table temporaire existe.
4-4. Remarques lors de la suppression des tables temporaires
1) Les tables temporaires diffèrent selon la session
Vous pouvez créer des tables temporaires portant le même nom dans plusieurs sessions.
Vous ne pouvez pas supprimer une table temporaire créée par une autre session.
Exemple
-- Created in session A
CREATE TEMPORARY TABLE temp_data (id INT);
-- Attempt to drop in session B
DROP TEMPORARY TABLE temp_data;
Une erreur se produit :
ERROR 1051 (42S02): Unknown table 'temp_data'
Une table temporaire ne peut être supprimée que dans la session qui l’a créée.
2) Conflit potentiel avec une table permanente portant le même nom
Si une table temporaire porte le même nom qu’une table permanente,
la table temporaire a la priorité et la table permanente devient invisible.
Exemple
-- A regular table (users) exists
SELECT * FROM users;
-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (id INT, name VARCHAR(50));
-- This now references the temporary table users
SELECT * FROM users;
Solution :
- Utilisez un préfixe comme
temp_pour les tables temporaires afin d’éviter les conflits de noms.
Résumé
Dans cette section, nous avons expliqué comment fonctionne la suppression des tables temporaires et comment les supprimer.
✔ Récapitulatif rapide
- Les tables temporaires sont automatiquement supprimées à la fin de la session
- Elles restent tant que la session est active
- Pour les supprimer manuellement, utilisez
DROP TEMPORARY TABLE - Ajoutez
IF EXISTSpour éviter les erreurs - Vous ne pouvez pas vérifier les tables temporaires avec
SHOW TABLES - Vous ne pouvez supprimer une table temporaire que dans la session qui l’a créée
- Utilisez un préfixe pour éviter les conflits avec les tables permanentes portant le même nom
5. 5 cas d’utilisation pratiques des tables temporaires MySQL (y compris l’optimisation des performances)
Introduction
Les tables temporaires MySQL vous permettent de stocker des données intermédiaires et de simplifier les requêtes complexes, aidant à améliorer les performances de la base de données.
Dans cette section, nous présentons cinq cas d’utilisation pratiques des tables temporaires.
Nous expliquons comment elles peuvent être utilisées dans des scénarios réels, avec des exemples SQL.
5-1. Optimiser les performances des requêtes (Réduire la surcharge des JOIN)
Problème
Lors du traitement de grands ensembles de données, exécuter des opérations JOIN directement peut dégrader les performances.
Solution
Utilisez une table temporaire pour préfiltrer les données cibles avant d’effectuer le JOIN, réduisant ainsi la charge de traitement.
Exemple : Récupérer les données de commande pour les utilisateurs actifs
-- First, store only active users in a temporary table
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';
-- Perform JOIN using the temporary table
SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;
Avantages
- Réduit la charge du
JOINen ciblant uniquement les utilisateurs actifs au lieu de toute la tableusers - Simplifie la requête principale, améliorant la lisibilité
5-2. Traitement d’agrégation temporaire
Problème
Exécuter à plusieurs reprises la même requête d’agrégation peut réduire les performances.
Solution
Stockez les résultats d’agrégation dans une table temporaire une fois pour éviter des calculs répétés inutiles.
Exemple : Stocker les données de ventes mensuelles dans une table temporaire
-- Calculate monthly total sales and store in a temporary table
CREATE TEMPORARY TABLE temp_monthly_sales AS
SELECT DATE_FORMAT(order_date, '%Y-%m') AS month, SUM(total_price) AS total_sales
FROM orders
GROUP BY month;
-- Retrieve aggregated results
SELECT * FROM temp_monthly_sales WHERE total_sales > 100000;
Avantages
- Réutiliser les données agrégées plusieurs fois
- Améliorer les performances en évitant les calculs redondants
5-3. Stocker des données intermédiaires pour le traitement par lots
Problème
Lors de mises à jour ou suppressions en masse, des erreurs pendant le traitement peuvent laisser les données dans un état incohérent.
Solution
Utilisez une table temporaire pour stocker les données intermédiaires et maintenir la cohérence des données.
Exemple : Mettre à jour les données de commande sous des conditions spécifiques
-- Store target rows in a temporary table
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';
-- Perform update based on the temporary table
UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1; -- Increase price by 10%
Avantages
- Mettre à jour en toute sécurité uniquement les données sélectionnées
- Facile de vérifier les données avant et après les mises à jour
5-4. Gestion des données temporaires par utilisateur
Problème
Si les données temporaires spécifiques à un utilisateur sont stockées dans une table ordinaire, des données inutiles peuvent s’accumuler avec le temps.
Solution
Les tables temporaires suppriment automatiquement les données à la fin de la session, éliminant ainsi la charge de maintenance.
Exemple : Stocker les résultats de recherche dans une table temporaire
-- Store user-specific search results
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';
-- Display search results
SELECT * FROM temp_search_results;
Avantages
- Les données sont automatiquement supprimées à la fin de la session
- Les résultats de recherche temporaires peuvent être réutilisés pendant la session
5-5. Choisir entre les tables temporaires et les vues
Problème
Lors de l’optimisation de requêtes exécutées fréquemment, vous pouvez vous demander s’il faut utiliser une table temporaire ou une VIEW, surtout si un stockage de données temporaires est requis.
Solution
- Si les données ne changent pas fréquemment → Utilisez une vue (VIEW)
- Si les données changent fréquemment ou nécessitent une matérialisation → Utilisez une table temporaire
Exemple : Utilisation d’une table temporaire
CREATE TEMPORARY TABLE temp_high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;
SELECT * FROM temp_high_value_customers;
Exemple : Utilisation d’une vue
CREATE VIEW high_value_customers AS
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 50000;
Avantages
- Les tables temporaires stockent les données physiquement, ce qui peut améliorer les performances
- Les vues sont pratiques pour la réutilisation de requêtes, mais les performances peuvent diminuer avec de grands ensembles de données
Résumé
Dans cette section, nous avons présenté cinq cas d’utilisation pratiques des tables temporaires MySQL.
✔ Récapitulatif rapide
- Optimiser les performances des requêtes (réduire le coût des JOIN) → Stocker uniquement les données nécessaires dans une table temporaire avant d’effectuer le JOIN
- Traitement d’agrégation temporaire → Stocker les résultats agrégés pour éviter des calculs répétés
- Données intermédiaires pour le traitement par lots → Gérer en toute sécurité les mises à jour à grande échelle
- Gestion des données temporaires par utilisateur → Les données sont automatiquement supprimées à la fin de la session
- Choisir entre les tables temporaires et les vues → Utilisez les tables temporaires pour les données changeantes, les vues pour la réutilisation stable des requêtes
6. Trois précautions importantes lors de l’utilisation sécurisée des tables temporaires MySQL
Introduction
Les tables temporaires MySQL fonctionnent de manière indépendante par session et sont automatiquement supprimées sous certaines conditions, ce qui en fait une fonctionnalité pratique. Cependant, une utilisation incorrecte peut entraîner une dégradation des performances ou des erreurs inattendues.
Dans cette section, nous expliquons trois précautions importantes pour garantir une utilisation sûre des tables temporaires.
6-1. Précaution 1 : Ne pas trop compter sur la suppression automatique
Problème
Comme les tables temporaires sont automatiquement supprimées à la fin de la session, il peut sembler inutile de les supprimer explicitement. Cependant, cela peut parfois provoquer des problèmes inattendus.
Exemples de problèmes
- Les connexions de longue durée continuent de consommer de la mémoire
- Si une session reste ouverte, les tables temporaires ne sont pas supprimées et continuent de consommer des ressources de la base de données.
- Ne pas supprimer explicitement peut entraîner des défauts de conception
- Si un processus batch se reconnecte de manière inattendue, la table temporaire peut disparaître et provoquer des erreurs.
Solution
- Supprimez explicitement les tables temporaires lorsqu’elles ne sont plus nécessaires en utilisant
DROP TEMPORARY TABLE - Dans les connexions de longue durée (par ex., les jobs batch), supprimez les tables temporaires périodiquement
Exemple : Supprimer explicitement une table temporaire
DROP TEMPORARY TABLE IF EXISTS temp_users;
Point clé
- Ajouter
IF EXISTSempêche les erreurs si la table n’existe pas.
6-2. Précaution 2 : Éviter les conflits de noms avec les tables régulières
Problème
Vous pouvez créer une table temporaire avec le même nom qu’une table régulière. Cependant, dans ce cas, la table régulière devient temporairement invisible.
Exemple du problème
-- A regular users table exists
SELECT * FROM users;
-- Create a temporary table with the same name
CREATE TEMPORARY TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- This now returns data from the temporary table, not the regular one
SELECT * FROM users;
Tant que la table temporaire existe, la table régulière portant le même nom est masquée, ce qui peut entraîner des erreurs inattendues de récupération de données.
Solution
- Utilisez un préfixe tel que « temp_ » pour les noms de tables temporaires
- Adoptez une convention de nommage claire pour distinguer les tables temporaires des tables régulières
Exemple : Création sûre d’une table temporaire
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
Avantages
- L’utilisation du préfixe
temp_empêche les conflits avec la table régulièreusers. - Cela facilite la distinction des tables dans le code de l’application.
6-3. Précaution 3 : Les index et contraintes ne sont pas hérités automatiquement
Problème
Si vous créez une table avec CREATE TEMPORARY TABLE ... AS SELECT ..., les index et contraintes de la table d’origine ne sont pas hérités, ce qui peut dégrader les performances.
Exemple du problème
-- Regular users table (with indexes)
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
-- Create temporary table (indexes are NOT inherited)
CREATE TEMPORARY TABLE temp_users AS
SELECT id, email, name FROM users;
Dans ce cas, les contraintes PRIMARY KEY et UNIQUE ne sont pas transférées vers temp_users, ce qui peut ralentir les recherches et permettre des données dupliquées.
Solution
- Ajoutez explicitement des index après la création de la table temporaire
- Si vous définissez les colonnes manuellement avec
CREATE TEMPORARY TABLE, spécifiez les index lors de la création
Exemple : Ajouter des index manuellement
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
ALTER TABLE temp_users ADD INDEX idx_email (email);
Cette approche vous permet de créer une table temporaire avec des index similaires à ceux de la table d’origine.
Résumé
Dans cette section, nous avons expliqué trois précautions importantes pour utiliser les tables temporaires en toute sécurité.
✔ Récapitulatif rapide
- Ne pas trop compter sur la suppression automatique
- Supprimez explicitement les tables temporaires en utilisant
DROP TEMPORARY TABLE - Supprimez-les périodiquement dans les sessions de longue durée
- Éviter les conflits de noms avec les tables régulières
- Si une table régulière portant le même nom existe, la table temporaire prend le dessus
- Utilisez un préfixe comme
temp_pour distinguer clairement
- Les index et contraintes ne sont pas hérités automatiquement
- Avec
CREATE TEMPORARY TABLE ... AS SELECT ..., les index sont perdus - Ajoutez les index manuellement après la création
En gardant ces points à l’esprit, vous pouvez exploiter en toute sécurité les tables temporaires MySQL tout en améliorant les performances de la base de données.
7. 10 Questions fréquemment posées (FAQ) sur les tables temporaires MySQL
Introduction
Dans cette section, nous répondons à 10 questions fréquemment posées sur les tables temporaires MySQL.
Nous couvrons leur fonctionnement, leurs limites, les considérations de performance et le dépannage dans des scénarios pratiques.
7-1. Questions sur les spécifications de base
Q1. Une table temporaire peut-elle être accédée depuis une autre session ?
R. Non, ce n’est pas possible.
Une table temporaire est valide uniquement dans la session qui l’a créée et ne peut pas être accédée depuis d’autres sessions.
-- Created in Session A
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- Attempt to access from Session B (results in error)
SELECT * FROM temp_users;
Erreur :
ERROR 1146 (42S02): Table 'temp_users' doesn't exist
Si vous devez partager des données entre sessions, vous devez utiliser une table ordinaire.
Q2. Les tables temporaires sont‑elles stockées sur le disque ?
R. Elles sont généralement stockées en mémoire, mais peuvent être déplacées sur le disque sous certaines conditions.
Si la taille de la table dépasse tmp_table_size ou max_heap_table_size, MySQL peut créer la table temporaire sur le disque en utilisant InnoDB ou MyISAM.
SHOW VARIABLES LIKE 'tmp_table_size';
Pour améliorer les performances, configurez tmp_table_size de manière appropriée.
Q3. Puis‑je créer des index sur une table temporaire ?
R. Oui, vous le pouvez.
Vous pouvez définir PRIMARY KEY ou INDEX comme avec une table ordinaire.
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(100) UNIQUE,
name VARCHAR(50)
);
ALTER TABLE temp_users ADD INDEX idx_email (email);
Cependant, si vous utilisez CREATE TEMPORARY TABLE ... AS SELECT ..., les index ne sont pas hérités, vous devez donc les ajouter manuellement.
7-2. Questions sur la performance et le comportement
Q4. Y a‑t‑il des changements concernant les tables temporaires dans MySQL 8.0 ?
R. MySQL 8.0 a introduit les expressions de table communes (CTE) avec la clause WITH.
À partir de MySQL 8.0, vous pouvez traiter des ensembles de résultats temporaires en utilisant les CTE sans créer explicitement une table temporaire.
WITH temp_users AS (
SELECT id, name FROM users WHERE status = 'active'
)
SELECT * FROM temp_users;
Utiliser les CTE à la place des tables temporaires peut simplifier les requêtes et réduire l’utilisation de la mémoire.
Q5. Quelle est la différence entre une table temporaire et une table MEMORY ?
R. Une table MEMORY persiste au‑delà d’une session, alors qu’une table temporaire ne le fait pas.
Une table temporaire est supprimée à la fin de la session, tandis qu’une table MEMORY reste jusqu’au redémarrage du serveur (ou jusqu’à ce qu’elle soit explicitement supprimée).
CREATE TABLE memory_table (
id INT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY;
Quand utiliser l’une ou l’autre ?
- Table temporaire : Traitement à court terme, limité à la session
- Table MEMORY : Accès à haute vitesse avec persistance au niveau du serveur
7-3. Questions sur la suppression et le dépannage
Q6. Puis‑je supprimer une table temporaire avec DROP TABLE ?
R. Non, vous devez utiliser DROP TEMPORARY TABLE.
Utilisez toujours DROP TEMPORARY TABLE lors de la suppression d’une table temporaire.
DROP TEMPORARY TABLE temp_users;
Utiliser un DROP TABLE ordinaire peut entraîner une erreur.
Q7. Pourquoi SHOW TABLES n’affiche‑t‑il pas les tables temporaires ?
R. Les tables temporaires ne sont pas listées par SHOW TABLES.
Pour vérifier leur existence, interrogez INFORMATION_SCHEMA.
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'temp_users';
Si aucun résultat n’est renvoyé, la table temporaire a peut‑être déjà été supprimée.
Résumé
Dans cette section, nous avons couvert 10 questions fréquemment posées sur les tables temporaires MySQL.
✔ Récapitulatif rapide
- Les tables temporaires ne peuvent pas être accédées depuis d’autres sessions
- Elles sont créées en mémoire mais peuvent passer sur disque si elles sont volumineuses
- Les index doivent être définis manuellement si on utilise AS SELECT
- Les CTE (
WITH) sont disponibles dans MySQL 8.0+ - Contrairement aux tables MEMORY, les tables temporaires disparaissent à la fin de la session
- Utilisez
DROP TEMPORARY TABLEpour les supprimer SHOW TABLESn’affiche pas les tables temporaires
8. Résumé : Points clés pour utiliser efficacement les tables temporaires MySQL
Introduction
Les tables temporaires MySQL sont un outil puissant pour stocker des données intermédiaires et optimiser les performances des requêtes.
Ici, nous résumons les points clés discutés tout au long de ce guide.
8-1. Concepts de base des tables temporaires MySQL
Qu’est-ce qu’une table temporaire ?
- Existe de manière indépendante par session
- Supprimée automatiquement lorsque la session se termine
- Supporte
INSERT,UPDATEetDELETEcomme une table régulière
Syntaxe de création de base
CREATE TEMPORARY TABLE temp_users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(100)
);
Principaux cas d’utilisation
- Stockage temporaire de données
- Optimisation des performances des requêtes
- Tables intermédiaires pour le traitement par lots
- Gestion de données temporaires par utilisateur
8-2. Avantages des tables temporaires
1) Améliorer les performances des requêtes
- Réduire la charge des JOIN
- Effectuer l’agrégation à l’avance pour réduire les calculs répétés
- Simplifier les requêtes en excluant les données inutiles
Exemple : Réduire la surcharge des JOIN
CREATE TEMPORARY TABLE temp_active_users AS
SELECT id, name FROM users WHERE status = 'active';
SELECT o.order_id, t.name, o.total_price
FROM orders o
JOIN temp_active_users t ON o.customer_id = t.id;
2) Stockage temporaire et gestion basée sur la session
- Supprimée automatiquement à la fin de la session
- Idéale pour le stockage de données à court terme
- Manipulation de données indépendante sans affecter d’autres sessions
Exemple : Stockage temporaire des résultats de recherche
CREATE TEMPORARY TABLE temp_search_results AS
SELECT * FROM products WHERE category = 'electronics';
SELECT * FROM temp_search_results;
3) Mises à jour de données sécurisées
- Utile comme table intermédiaire dans le traitement par lots
- Peut servir de sauvegarde pendant les mises à jour de données
- Efficace pour créer des ensembles de données de test
Exemple : Mise à jour de données sécurisée
CREATE TEMPORARY TABLE temp_orders AS
SELECT order_id, total_price FROM orders WHERE status = 'pending';
UPDATE orders o
JOIN temp_orders t ON o.order_id = t.order_id
SET o.total_price = t.total_price * 1.1;
8-3. Inconvénients et précautions
1) Les données disparaissent lorsque la session se termine
- Non adaptée au stockage permanent
- Utilisez des tables régulières pour la persistance à long terme
2) Ne peuvent pas être partagées entre sessions
- Non accessible depuis d’autres connexions
- Utilisez des tables régulières pour partager des données entre utilisateurs
3) Les index et contraintes ne sont pas hérités automatiquement
CREATE TEMPORARY TABLE ... AS SELECT ...ne crée pas d’index- Ajoutez les index manuellement si nécessaire
ALTER TABLE temp_users ADD INDEX idx_email (email);
8-4. Meilleures pratiques pour une utilisation sécurisée
✅ Supprimez explicitement quand elles ne sont plus nécessaires
DROP TEMPORARY TABLE IF EXISTS temp_users;
✅ Évitez les conflits de noms avec les tables régulières
- Utilisez un préfixe
temp_CREATE TEMPORARY TABLE temp_users (...);
✅ Concevez en tenant compte des performances
- Si la table devient volumineuse et passe sur disque, envisagez d’ajuster
tmp_table_sizeSHOW VARIABLES LIKE 'tmp_table_size';
8-5. Tables temporaires vs alternatives (vues et CTE)
Il est également important de considérer quand utiliser des tables temporaires par rapport aux vues (VIEW) ou CTE (Common Table Expressions).
| Method | Characteristics | Best Use Case |
|---|---|---|
| Temporary table | Removed at session end | When you need to store intermediate data |
| View (VIEW) | Data retrieved in real time; performance may degrade with large datasets | Save and reuse frequently referenced queries |
| CTE (WITH clause) | Virtual table valid only within a single query | Handle temporary data without creating a table |
Résumé
Dans ce guide, nous avons couvert tous les aspects clés des tables temporaires MySQL.
✔ Récapitulatif rapide
- Les tables temporaires sont automatiquement supprimées lorsque la session se termine
- Elles aident à optimiser les performances en réduisant la surcharge des JOIN et des agrégations
- Utiles pour le traitement par lots, les résultats de recherche temporaires et les données de test
- Elles ne peuvent pas être partagées entre sessions, et les index doivent être ajoutés manuellement si nécessaire
- Choisir entre tables temporaires, vues et CTE permet une gestion flexible des données
Vous avez maintenant terminé toutes les sections du guide sur les tables temporaires MySQL ! 🎉
Utilisez cette référence pour exploiter efficacement les tables temporaires dans vos projets MySQL.


