Tables temporaires MySQL : création, utilisation, suppression + meilleures pratiques (exemples SQL)

目次

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.

ComparisonTemporary TableRegular Table
Data retentionValid only during the session (automatically removed)Stored permanently
Access scopeOnly within the session that created itAccessible to all users (subject to privileges)
Name conflictsYou can create temporary tables with the same nameYou cannot create another table with the same name in the same database
Required privilegesRequires the CREATE TEMPORARY TABLES privilegeRequires the standard CREATE TABLE privilege
IndexesSupportedSupported
PerformanceOften created in memory and can be fastStored 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 traitementTable temporaire
  • Si vous souhaitez conserver les données de façon permanente et les réutiliser plus tardTable 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 ; TRUNCATE n’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 EXISTS pour é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 JOIN en ciblant uniquement les utilisateurs actifs au lieu de toute la table users
  • 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équemmentUtilisez une vue (VIEW)
  • Si les données changent fréquemment ou nécessitent une matérialisationUtilisez 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

  1. 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
  2. Traitement d’agrégation temporaire → Stocker les résultats agrégés pour éviter des calculs répétés
  3. Données intermédiaires pour le traitement par lots → Gérer en toute sécurité les mises à jour à grande échelle
  4. Gestion des données temporaires par utilisateur → Les données sont automatiquement supprimées à la fin de la session
  5. 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 EXISTS empê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ère users.
  • 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

  1. 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
  1. É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
  1. 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

  1. Les tables temporaires ne peuvent pas être accédées depuis d’autres sessions
  2. Elles sont créées en mémoire mais peuvent passer sur disque si elles sont volumineuses
  3. Les index doivent être définis manuellement si on utilise AS SELECT
  4. Les CTE (WITH) sont disponibles dans MySQL 8.0+
  5. Contrairement aux tables MEMORY, les tables temporaires disparaissent à la fin de la session
  6. Utilisez DROP TEMPORARY TABLE pour les supprimer
  7. SHOW TABLES n’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, UPDATE et DELETE comme 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_size
    SHOW 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).

MethodCharacteristicsBest Use Case
Temporary tableRemoved at session endWhen you need to store intermediate data
View (VIEW)Data retrieved in real time; performance may degrade with large datasetsSave and reuse frequently referenced queries
CTE (WITH clause)Virtual table valid only within a single queryHandle 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.