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âcheCommande
Lister toutes les tablesSHOW TABLES;
Tables d’une autre BDDSHOW TABLES FROM nom_bdd;
Filtrer par motifSHOW TABLES LIKE 'motif%';
Voir les taillesRequête information_schema.TABLES
Depuis le terminalmysql -u user -p bdd -e "SHOW TABLES;"
Sans formatagemysql -u user -p bdd -N -B -e "SHOW TABLES;"
Exporter en fichierAjouter > 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();

Articles connexes