Lister les tables disponibles dans une base de données MySQL est l’une des opérations les plus courantes pour tout administrateur de bases de données ou développeur. Cet article couvre plusieurs méthodes, de la commande basique SHOW TABLES aux requêtes avancées avec information_schema.
Méthode de base : SHOW TABLES
Sélectionner la base de données et afficher les tables
-- Sélectionner la base de données
USE ma_base;
-- Afficher toutes les tables
SHOW TABLES;
Exemple de résultat :
+---------------------+
| Tables_in_ma_base |
+---------------------+
| clients |
| commandes |
| produits |
| categories |
+---------------------+
4 rows in set (0.00 sec)
Afficher les tables d’une base spécifique
Sans avoir à changer la base active :
SHOW TABLES FROM nom_bdd;
-- Équivalent :
SHOW TABLES IN nom_bdd;
Filtrer les tables par motif
Utiliser LIKE pour la recherche par nom
-- Tables commençant par 'wp_'
SHOW TABLES LIKE 'wp_%';
-- Tables contenant 'log' dans le nom
SHOW TABLES LIKE '%log%';
-- Tables se terminant par '_backup'
SHOW TABLES LIKE '%_backup';
Filtrer avec WHERE
SHOW TABLES FROM ma_base WHERE Tables_in_ma_base LIKE '%utilisateur%';
Requêtes avancées avec information_schema
La table information_schema.TABLES fournit des informations détaillées sur toutes les tables :
Lister les tables avec leur type
SELECT table_name, table_type
FROM information_schema.TABLES
WHERE table_schema = 'ma_base'
ORDER BY table_name;
Voir la taille de chaque table
SELECT
table_name AS 'Table',
table_rows AS 'Lignes',
ROUND(data_length / 1024 / 1024, 2) AS 'Données (Mo)',
ROUND(index_length / 1024 / 1024, 2) AS 'Index (Mo)',
ROUND((data_length + index_length) / 1024 / 1024, 2) AS 'Total (Mo)'
FROM information_schema.TABLES
WHERE table_schema = 'ma_base'
ORDER BY (data_length + index_length) DESC;
Résumé de la taille totale de la base
SELECT
table_schema AS 'Base de données',
COUNT(*) AS 'Tables',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Taille totale (Mo)'
FROM information_schema.TABLES
WHERE table_schema = 'ma_base'
GROUP BY table_schema;
Lister les tables avec le moteur de stockage
SELECT table_name, engine, table_collation
FROM information_schema.TABLES
WHERE table_schema = 'ma_base'
ORDER BY table_name;
Depuis la ligne de commande
Exécuter une requête directement
Utilisez l’option -e pour exécuter une requête sans entrer dans le client interactif :
# Lister les tables
mysql -u utilisateur -p ma_base -e "SHOW TABLES;"
# En format vertical (plus lisible avec beaucoup de colonnes)
mysql -u utilisateur -p ma_base -e "SHOW TABLES;" -E
# Sortie sans en-têtes ni bordures (utile pour les scripts)
mysql -u utilisateur -p ma_base -N -B -e "SHOW TABLES;"
Exporter la liste dans un fichier
# Exporter en fichier texte
mysql -u utilisateur -p ma_base -N -B -e "SHOW TABLES;" > tables.txt
# Exporter avec les tailles en CSV
mysql -u utilisateur -p ma_base -N -B -e "
SELECT table_name, table_rows,
ROUND((data_length + index_length)/1024/1024, 2)
FROM information_schema.TABLES
WHERE table_schema = 'ma_base';" > tables_tailles.csv
Utilisation dans les scripts
Script Bash pour lister les tables de toutes les bases
#!/bin/bash
MYSQL_USER="root"
MYSQL_PASS="votre_mot_de_passe"
# Récupérer la liste des bases (en excluant les bases système)
databases=$(mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" -N -B -e "
SELECT schema_name FROM information_schema.SCHEMATA
WHERE schema_name NOT IN ('mysql','information_schema','performance_schema','sys');")
for db in $databases; do
echo "=== Base de données : $db ==="
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" "$db" -N -B -e "SHOW TABLES;"
echo ""
done
Script pour vérifier si une table existe
#!/bin/bash
DB="ma_base"
TABLE="clients"
existe=$(mysql -u root -p"$MYSQL_PASS" -N -B -e "
SELECT COUNT(*) FROM information_schema.TABLES
WHERE table_schema='$DB' AND table_name='$TABLE';")
if [ "$existe" -eq 1 ]; then
echo "La table $TABLE existe dans $DB"
else
echo "La table $TABLE N'existe PAS dans $DB"
fi
Référence rapide
| Tâche | Commande |
|---|---|
| Lister toutes les tables | SHOW TABLES; |
| Tables d’une autre BDD | SHOW TABLES FROM nom_bdd; |
| Filtrer par motif | SHOW TABLES LIKE 'motif%'; |
| Voir les tailles | Requête information_schema.TABLES |
| Depuis le terminal | mysql -u user -p bdd -e "SHOW TABLES;" |
| Sans formatage | mysql -u user -p bdd -N -B -e "SHOW TABLES;" |
| Exporter en fichier | Ajouter > fichier.txt à la fin |
Dépannage
Erreur “Access denied”
Vérifiez que l’utilisateur possède le privilège SHOW DATABASES ou au moins SELECT sur la base de données :
SHOW GRANTS FOR 'utilisateur'@'localhost';
Toutes les tables ne sont pas affichées
Si des tables manquent, vérifiez les permissions. MySQL n’affiche que les tables sur lesquelles l’utilisateur actuel possède des privilèges.
Base de données vide
Si SHOW TABLES ne retourne aucun résultat, confirmez que vous êtes dans la bonne base :
SELECT DATABASE();