Listar las tablas disponibles en una base de datos MySQL es una de las operaciones más básicas y frecuentes para cualquier administrador de bases de datos o desarrollador. Este artículo cubre múltiples métodos, desde el comando básico SHOW TABLES hasta consultas avanzadas con information_schema.
Método básico: SHOW TABLES
Seleccionar la base de datos y mostrar tablas
-- Seleccionar la base de datos
USE mi_base_datos;
-- Mostrar todas las tablas
SHOW TABLES;
Resultado de ejemplo:
+---------------------------+
| Tables_in_mi_base_datos |
+---------------------------+
| clientes |
| pedidos |
| productos |
| categorias |
+---------------------------+
4 rows in set (0.00 sec)
Mostrar tablas de una base de datos específica
Sin necesidad de cambiar la base de datos activa:
SHOW TABLES FROM nombre_bd;
-- Equivalente:
SHOW TABLES IN nombre_bd;
Filtrar tablas por patrón
Usar LIKE para buscar por nombre
-- Tablas que empiezan con 'wp_'
SHOW TABLES LIKE 'wp_%';
-- Tablas que contienen 'log' en el nombre
SHOW TABLES LIKE '%log%';
-- Tablas que terminan en '_backup'
SHOW TABLES LIKE '%_backup';
Filtrar con WHERE
SHOW TABLES FROM mi_base_datos WHERE Tables_in_mi_base_datos LIKE '%usuario%';
Consultas avanzadas con information_schema
La tabla information_schema.TABLES proporciona información detallada sobre todas las tablas:
Listar tablas con tipo
SELECT table_name, table_type
FROM information_schema.TABLES
WHERE table_schema = 'mi_base_datos'
ORDER BY table_name;
Ver tamaño de cada tabla
SELECT
table_name AS 'Tabla',
table_rows AS 'Filas',
ROUND(data_length / 1024 / 1024, 2) AS 'Datos (MB)',
ROUND(index_length / 1024 / 1024, 2) AS 'Índices (MB)',
ROUND((data_length + index_length) / 1024 / 1024, 2) AS 'Total (MB)'
FROM information_schema.TABLES
WHERE table_schema = 'mi_base_datos'
ORDER BY (data_length + index_length) DESC;
Resumen de tamaño total de la base de datos
SELECT
table_schema AS 'Base de datos',
COUNT(*) AS 'Tablas',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Tamaño total (MB)'
FROM information_schema.TABLES
WHERE table_schema = 'mi_base_datos'
GROUP BY table_schema;
Listar tablas con su motor de almacenamiento
SELECT table_name, engine, table_collation
FROM information_schema.TABLES
WHERE table_schema = 'mi_base_datos'
ORDER BY table_name;
Desde la línea de comandos
Ejecutar consulta directamente
Usa la opción -e para ejecutar una consulta sin entrar al cliente interactivo:
# Listar tablas
mysql -u usuario -p mi_base_datos -e "SHOW TABLES;"
# Con formato vertical (más legible para muchas columnas)
mysql -u usuario -p mi_base_datos -e "SHOW TABLES;" -E
# Salida sin cabeceras ni marcos (útil para scripts)
mysql -u usuario -p mi_base_datos -N -B -e "SHOW TABLES;"
Exportar lista a un archivo
# Exportar a archivo de texto
mysql -u usuario -p mi_base_datos -N -B -e "SHOW TABLES;" > tablas.txt
# Exportar con tamaños a CSV
mysql -u usuario -p mi_base_datos -N -B -e "
SELECT table_name, table_rows,
ROUND((data_length + index_length)/1024/1024, 2)
FROM information_schema.TABLES
WHERE table_schema = 'mi_base_datos';" > tablas_tamanos.csv
Uso en scripts
Script Bash para listar tablas de todas las bases de datos
#!/bin/bash
MYSQL_USER="root"
MYSQL_PASS="tu_contraseña"
# Obtener lista de bases de datos (excluyendo las de sistema)
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 datos: $db ==="
mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" "$db" -N -B -e "SHOW TABLES;"
echo ""
done
Script para verificar si una tabla existe
#!/bin/bash
DB="mi_base_datos"
TABLA="clientes"
existe=$(mysql -u root -p"$MYSQL_PASS" -N -B -e "
SELECT COUNT(*) FROM information_schema.TABLES
WHERE table_schema='$DB' AND table_name='$TABLA';")
if [ "$existe" -eq 1 ]; then
echo "La tabla $TABLA existe en $DB"
else
echo "La tabla $TABLA NO existe en $DB"
fi
Referencia rápida
| Tarea | Comando |
|---|---|
| Listar todas las tablas | SHOW TABLES; |
| Tablas de otra BD | SHOW TABLES FROM nombre_bd; |
| Filtrar por patrón | SHOW TABLES LIKE 'patrón%'; |
| Ver tamaños | Consulta information_schema.TABLES |
| Desde terminal | mysql -u user -p bd -e "SHOW TABLES;" |
| Sin formato | mysql -u user -p bd -N -B -e "SHOW TABLES;" |
| Exportar a archivo | Agregar > archivo.txt al final |
Solución de problemas
Error “Access denied”
Comprueba que el usuario tiene el privilegio SHOW DATABASES o al menos SELECT en la base de datos:
SHOW GRANTS FOR 'usuario'@'localhost';
No se muestran todas las tablas
Si faltan tablas, verifica los permisos. MySQL solo muestra las tablas sobre las que el usuario actual tiene algún privilegio.
Base de datos vacía
Si SHOW TABLES no devuelve resultados, confirma que estás en la base de datos correcta:
SELECT DATABASE();