Listar as tabelas disponíveis em um banco de dados MySQL é uma das operações mais básicas e frequentes para qualquer administrador de bancos de dados ou desenvolvedor. Este artigo abrange múltiplos métodos, desde o comando básico SHOW TABLES até consultas avançadas com information_schema.

Método básico: SHOW TABLES

Selecionar o banco de dados e mostrar tabelas

-- Selecionar o banco de dados
USE meu_banco;

-- Mostrar todas as tabelas
SHOW TABLES;

Exemplo de resultado:

+----------------------+
| Tables_in_meu_banco  |
+----------------------+
| clientes             |
| pedidos              |
| produtos             |
| categorias           |
+----------------------+
4 rows in set (0.00 sec)

Mostrar tabelas de um banco de dados específico

Sem precisar mudar o banco ativo:

SHOW TABLES FROM nome_bd;

-- Equivalente:
SHOW TABLES IN nome_bd;

Filtrar tabelas por padrão

Usar LIKE para busca por nome

-- Tabelas que começam com 'wp_'
SHOW TABLES LIKE 'wp_%';

-- Tabelas que contêm 'log' no nome
SHOW TABLES LIKE '%log%';

-- Tabelas que terminam em '_backup'
SHOW TABLES LIKE '%_backup';

Filtrar com WHERE

SHOW TABLES FROM meu_banco WHERE Tables_in_meu_banco LIKE '%usuario%';

Consultas avançadas com information_schema

A tabela information_schema.TABLES fornece informações detalhadas sobre todas as tabelas:

Listar tabelas com tipo

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

Ver tamanho de cada tabela

SELECT 
    table_name AS 'Tabela',
    table_rows AS 'Linhas',
    ROUND(data_length / 1024 / 1024, 2) AS 'Dados (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 = 'meu_banco'
ORDER BY (data_length + index_length) DESC;

Resumo do tamanho total do banco de dados

SELECT 
    table_schema AS 'Banco de dados',
    COUNT(*) AS 'Tabelas',
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Tamanho total (MB)'
FROM information_schema.TABLES
WHERE table_schema = 'meu_banco'
GROUP BY table_schema;

Listar tabelas com motor de armazenamento

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

Pela linha de comando

Executar consulta diretamente

Use a opção -e para executar uma consulta sem entrar no cliente interativo:

# Listar tabelas
mysql -u usuario -p meu_banco -e "SHOW TABLES;"

# Em formato vertical (mais legível com muitas colunas)
mysql -u usuario -p meu_banco -e "SHOW TABLES;" -E

# Saída sem cabeçalhos nem bordas (útil para scripts)
mysql -u usuario -p meu_banco -N -B -e "SHOW TABLES;"

Exportar lista para um arquivo

# Exportar para arquivo de texto
mysql -u usuario -p meu_banco -N -B -e "SHOW TABLES;" > tabelas.txt

# Exportar com tamanhos em CSV
mysql -u usuario -p meu_banco -N -B -e "
SELECT table_name, table_rows, 
       ROUND((data_length + index_length)/1024/1024, 2) 
FROM information_schema.TABLES 
WHERE table_schema = 'meu_banco';" > tabelas_tamanhos.csv

Uso em scripts

Script Bash para listar tabelas de todos os bancos

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

# Obter lista de bancos (excluindo os 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 "=== Banco de dados: $db ==="
    mysql -u "$MYSQL_USER" -p"$MYSQL_PASS" "$db" -N -B -e "SHOW TABLES;"
    echo ""
done

Script para verificar se uma tabela existe

#!/bin/bash
DB="meu_banco"
TABELA="clientes"

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

if [ "$existe" -eq 1 ]; then
    echo "A tabela $TABELA existe em $DB"
else
    echo "A tabela $TABELA NÃO existe em $DB"
fi

Referência rápida

TarefaComando
Listar todas as tabelasSHOW TABLES;
Tabelas de outro BDSHOW TABLES FROM nome_bd;
Filtrar por padrãoSHOW TABLES LIKE 'padrao%';
Ver tamanhosConsulta information_schema.TABLES
Pelo terminalmysql -u user -p bd -e "SHOW TABLES;"
Sem formataçãomysql -u user -p bd -N -B -e "SHOW TABLES;"
Exportar para arquivoAdicionar > arquivo.txt ao final

Solução de problemas

Erro “Access denied”

Verifique se o usuário possui o privilégio SHOW DATABASES ou pelo menos SELECT no banco de dados:

SHOW GRANTS FOR 'usuario'@'localhost';

Nem todas as tabelas aparecem

Se tabelas estão faltando, verifique as permissões. O MySQL só mostra tabelas sobre as quais o usuário atual possui algum privilégio.

Banco de dados vazio

Se SHOW TABLES não retorna resultados, confirme que você está no banco correto:

SELECT DATABASE();

Artigos relacionados