Maison >base de données >tutoriel mysql >Comment contourner l'erreur « Impossible de rouvrir la table » dans les tables temporaires MySQL ?

Comment contourner l'erreur « Impossible de rouvrir la table » dans les tables temporaires MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 03:05:03230parcourir

How to Workaround the

S'attaquer à l'erreur « Impossible de rouvrir la table » dans MySQL

Dans le traitement des données, la possibilité d'utiliser une table plusieurs fois dans une requête complexe est souvent essentielle. Cependant, lorsque vous travaillez avec des tables temporaires dans MySQL, cette opération apparemment basique rencontre l'erreur frustrante "Impossible de rouvrir la table".

Contexte

Comme décrit par Kris, une requête complexe impliquant plusieurs INNER JOINS sur une table temporaire entraîne l'erreur. Cela se produit car MySQL n'autorise pas l'ouverture de tables temporaires plusieurs fois dans la même requête.

Solution de contournement

Pour contourner cette limitation, une solution simple mais efficace consiste à dupliquez la table temporaire, créant essentiellement deux versions identiques. Cela fonctionne particulièrement bien lorsque la table temporaire est relativement petite, comme c'est souvent le cas.

Mise en œuvre

Les étapes suivantes décrivent la mise en œuvre de cette solution de contournement :

  1. Créez la table temporaire :
CREATE TEMPORARY TABLE search (baseID INT, condition TEXT);
  1. Remplissez le table temporaire avec des données :
INSERT INTO search (baseID, condition) VALUES (1, 'condition1'), (1, 'condition2'), ...;
  1. Maintenant, dupliquez la table temporaire :
CREATE TEMPORARY TABLE search_copy AS SELECT * FROM search;
  1. Vous pouvez maintenant utiliser la table dupliquée comme autant de fois que nécessaire dans votre complexe requête :
SELECT
  *
FROM search
INNER JOIN search_copy f1 ON f1.baseID = search.baseID AND f1.condition = condition1
INNER JOIN search_copy f2 ON f2.baseID = search.baseID AND f2.condition = condition2
...
INNER JOIN search_copy fN ON fN.baseID = search.baseID AND fN.condition = conditionN;

Avantages

Cette solution de contournement offre plusieurs avantages :

  • Simplicité : C’est simple à mettre en œuvre, même pour les juniors développeurs.
  • Efficacité :Il élimine l'erreur "Impossible de rouvrir la table", permettant des requêtes complexes avec des tables temporaires.
  • Efficacité de l'espace : La duplication de la table temporaire ne consomme pas d'espace disque supplémentaire sur le serveur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn