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
| Aufgabe | Befehl |
|---|---|
| Alle Tabellen auflisten | SHOW TABLES; |
| Tabellen anderer DB | SHOW TABLES FROM datenbankname; |
| Nach Muster filtern | SHOW TABLES LIKE 'muster%'; |
| Größen anzeigen | Abfrage von information_schema.TABLES |
| Vom Terminal | mysql -u user -p db -e "SHOW TABLES;" |
| Ohne Formatierung | mysql -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();