Das Auflisten der verfügbaren Tabellen in einer MySQL-Datenbank gehört zu den grundlegendsten und häufigsten Aufgaben für jeden Datenbankadministrator oder Entwickler. Dieser Artikel behandelt verschiedene Methoden, vom einfachen SHOW TABLES-Befehl bis hin zu erweiterten Abfragen mit information_schema.

Grundlegende Methode: SHOW TABLES

Datenbank auswählen und Tabellen anzeigen

-- Datenbank auswählen
USE meine_datenbank;

-- Alle Tabellen anzeigen
SHOW TABLES;

Beispielausgabe:

+-----------------------------+
| Tables_in_meine_datenbank   |
+-----------------------------+
| kunden                      |
| bestellungen                |
| produkte                    |
| kategorien                  |
+-----------------------------+
4 rows in set (0.00 sec)

Tabellen einer bestimmten Datenbank anzeigen

Ohne die aktive Datenbank wechseln zu müssen:

SHOW TABLES FROM datenbankname;

-- Gleichbedeutend:
SHOW TABLES IN datenbankname;

Tabellen nach Muster filtern

LIKE für die Namenssuche verwenden

-- Tabellen, die mit 'wp_' beginnen
SHOW TABLES LIKE 'wp_%';

-- Tabellen, die 'log' im Namen enthalten
SHOW TABLES LIKE '%log%';

-- Tabellen, die auf '_backup' enden
SHOW TABLES LIKE '%_backup';

Mit WHERE filtern

SHOW TABLES FROM meine_datenbank WHERE Tables_in_meine_datenbank LIKE '%benutzer%';

Erweiterte Abfragen mit information_schema

Die Tabelle information_schema.TABLES liefert detaillierte Informationen über alle Tabellen:

Tabellen mit Typ auflisten

SELECT table_name, table_type
FROM information_schema.TABLES
WHERE table_schema = 'meine_datenbank'
ORDER BY table_name;

Größe jeder Tabelle anzeigen

SELECT 
    table_name AS 'Tabelle',
    table_rows AS 'Zeilen',
    ROUND(data_length / 1024 / 1024, 2) AS 'Daten (MB)',
    ROUND(index_length / 1024 / 1024, 2) AS 'Indizes (MB)',
    ROUND((data_length + index_length) / 1024 / 1024, 2) AS 'Gesamt (MB)'
FROM information_schema.TABLES
WHERE table_schema = 'meine_datenbank'
ORDER BY (data_length + index_length) DESC;

Zusammenfassung der Gesamtgröße der Datenbank

SELECT 
    table_schema AS 'Datenbank',
    COUNT(*) AS 'Tabellen',
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Gesamtgröße (MB)'
FROM information_schema.TABLES
WHERE table_schema = 'meine_datenbank'
GROUP BY table_schema;

Tabellen mit Storage-Engine auflisten

SELECT table_name, engine, table_collation
FROM information_schema.TABLES
WHERE table_schema = 'meine_datenbank'
ORDER BY table_name;

Über die Kommandozeile

Abfrage direkt ausführen

Verwenden Sie die Option -e, um eine Abfrage auszuführen, ohne den interaktiven Client zu öffnen:

# Tabellen auflisten
mysql -u benutzer -p meine_datenbank -e "SHOW TABLES;"

# Im vertikalen Format (besser lesbar bei vielen Spalten)
mysql -u benutzer -p meine_datenbank -e "SHOW TABLES;" -E

# Ausgabe ohne Kopfzeilen und Rahmen (nützlich für Skripte)
mysql -u benutzer -p meine_datenbank -N -B -e "SHOW TABLES;"

Liste in eine Datei exportieren

# In Textdatei exportieren
mysql -u benutzer -p meine_datenbank -N -B -e "SHOW TABLES;" > tabellen.txt

# Mit Größen als CSV exportieren
mysql -u benutzer -p meine_datenbank -N -B -e "
SELECT table_name, table_rows, 
       ROUND((data_length + index_length)/1024/1024, 2) 
FROM information_schema.TABLES 
WHERE table_schema = 'meine_datenbank';" > tabellen_groessen.csv

Verwendung in Skripten

Bash-Skript zum Auflisten der Tabellen aller Datenbanken

#!/bin/bash
MYSQL_USER="root"
MYSQL_PASS="dein_passwort"

# Liste der Datenbanken abrufen (Systemdatenbanken ausschließen)
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 "=== Datenbank: $db ==="
    mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" "$db" -N -B -e "SHOW TABLES;"
    echo ""
done

Skript zum Überprüfen, ob eine Tabelle existiert

#!/bin/bash
DB="meine_datenbank"
TABELLE="kunden"

existiert=$(mysql -u root -p"$MYSQL_PASS" -N -B -e "
    SELECT COUNT(*) FROM information_schema.TABLES 
    WHERE table_schema='$DB' AND table_name='$TABELLE';")

if [ "$existiert" -eq 1 ]; then
    echo "Die Tabelle $TABELLE existiert in $DB"
else
    echo "Die Tabelle $TABELLE existiert NICHT in $DB"
fi

Kurzreferenz

AufgabeBefehl
Alle Tabellen auflistenSHOW TABLES;
Tabellen anderer DBSHOW TABLES FROM datenbankname;
Nach Muster filternSHOW TABLES LIKE 'muster%';
Größen anzeigenAbfrage von information_schema.TABLES
Vom Terminalmysql -u user -p db -e "SHOW TABLES;"
Ohne Formatierungmysql -u user -p db -N -B -e "SHOW TABLES;"
In Datei exportieren> datei.txt anhängen

Fehlerbehebung

Fehler “Access denied”

Überprüfen Sie, ob der Benutzer das Privileg SHOW DATABASES oder mindestens SELECT für die Datenbank besitzt:

SHOW GRANTS FOR 'benutzer'@'localhost';

Nicht alle Tabellen werden angezeigt

Falls Tabellen fehlen, überprüfen Sie die Berechtigungen. MySQL zeigt nur Tabellen an, für die der aktuelle Benutzer Privilegien besitzt.

Leere Datenbank

Wenn SHOW TABLES keine Ergebnisse liefert, bestätigen Sie, dass Sie in der richtigen Datenbank sind:

SELECT DATABASE();

Verwandte Artikel