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
| Tarefa | Comando |
|---|---|
| Listar todas as tabelas | SHOW TABLES; |
| Tabelas de outro BD | SHOW TABLES FROM nome_bd; |
| Filtrar por padrão | SHOW TABLES LIKE 'padrao%'; |
| Ver tamanhos | Consulta information_schema.TABLES |
| Pelo terminal | mysql -u user -p bd -e "SHOW TABLES;" |
| Sem formatação | mysql -u user -p bd -N -B -e "SHOW TABLES;" |
| Exportar para arquivo | Adicionar > 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();