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

TareaComando
Listar todas las tablasSHOW TABLES;
Tablas de otra BDSHOW TABLES FROM nombre_bd;
Filtrar por patrónSHOW TABLES LIKE 'patrón%';
Ver tamañosConsulta information_schema.TABLES
Desde terminalmysql -u user -p bd -e "SHOW TABLES;"
Sin formatomysql -u user -p bd -N -B -e "SHOW TABLES;"
Exportar a archivoAgregar > 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();

Artículos relacionados