Como mostrar os nomes das colunas de uma tabela?

17

O caso é simples: você possui um banco de dados MySQL em que possui apenas uma interface de consulta SQL e deseja conhecer a estrutura do banco de dados com consultas. Você pode listar tabelas com show tables;comando, mas como você vê os nomes das colunas individuais?

(a SELECTinstrução mostra Empty setse nenhum dado está presente e, portanto, NÃO pode ser usado.)

mico
fonte
Observe que a solução aceita é a mais baixa sobre o desccomando. Curioso, é o mais curto, mas tem menos votos. Para mim, também é o melhor.
Mico
2
você solicitou uma consulta SQL simples. Sua resposta não é SQL, portanto, isso pode explicar o baixo número de votos. Você provavelmente deve alterar o título da sua consulta para: "Como mostrar os nomes das colunas de uma tabela"
Lennart
Boa ideia, agora minha resposta combina melhor com a pergunta.
mico

Respostas:

36
select column_name from information_schema.columns where table_name='table'
msi77
fonte
2
Enquanto isso, descobri que essa consulta também é útil: show create table <table_name>onde, em vez de <table_name>, você coloca o nome da tabela em texto sem formatação. Isso fornece também os tipos, enquanto o seu é adequado para uma finalidade de listagem muito bem.
Mico
Como dito por @mico: "show create table tbl_name \ G" pode ser sua solução. Consulte dev.mysql.com/doc/refman/5.7/en/show-create-table.html A parte "\ G" está aqui apenas para formatar a saída. Saudações.
tdaget
6

A melhor solução que eu descobri sozinha foi o desc table_namecomando. Mais informações estão na lista de tabelas MySQL . Este comando fornece a descrição de uma tabela de banco de dados, que é exatamente o que eu estava tentando descobrir.

mico
fonte
6

Para certificar-se de listar colunas em uma tabela no banco de dados atual, use a função DATABASE () ou SCHEMA () . Retorna NULL se você não estiver em um banco de dados atual. Esta consulta mostrará as colunas em uma tabela na ordem em que as colunas foram definidas:

SELECT column_name,column_type
FROM information_schema.columns
WHERE table_schema = DATABASE()
AND table_name='table'
ORDER BY ordinal_position;
RolandoMySQLDBA
fonte
3

Não sei se entendi o que você quer dizer com títulos de tabela , mas você pode obter a maioria das informações sobre tabelas e suas colunas no arquivo Information_SCHEMA

um cavalo sem nome
fonte
3

como você vê os títulos das tabelas individuais?

Você quer dizer comentários na mesa ?

use stack;
create table t(v integer primary key) comment 'My Special Table';

show tables;
+-----------------+
| Tables_in_stack |
+-----------------+
| t               |
+-----------------+

select table_name, table_comment from information_schema.tables where table_name='t';
+------------+------------------+
| table_name | table_comment    |
+------------+------------------+
| t          | My Special Table |
+------------+------------------+
Jack Douglas
fonte
Eu queria esses nomes de coluna e já tenho algumas maneiras, graças a respostas rápidas. Obrigado por esse comentário também, Jack.
Mico
11
Você se importa em reformular sua pergunta um pouco para deixar mais claro as colunas que você procura?
Jack Douglas
2
SHOW COLUMNS FROM mydb.mytable;

onde mydb - é o banco de dados que contém a tabela necessária

mytable - é a tabela necessária

Ele retorna informações de colunas (por exemplo, nomes de colunas, tipo etc.)

Rolya Chuma
fonte
11
Pequenos trechos de código sem explicação de como eles resolvem o problema do OP são desencorajados. Por favor, tente adicionar mais detalhes à sua resposta.
Erik
0

Você precisa se juntar information_schema.tablese information_schema.columnsem conjunto para obter a lista de tabelas e detalhes de suas colunas.

information_schema.columnsnão apenas mostra detalhes sobre tabelas, mas também exibições. Não há como filtrar apenas os detalhes da tabela nessa visualização do sistema.

Portanto, você precisa participar.

Consulta de exemplo:

select t.TABLE_SCHEMA, t.TABLE_NAME, c.COLUMN_NAME, c.COLUMN_TYPE, c.DATA_TYPE
from information_schema.tables t , information_schema.columns c where 2=2 
and t.table_schema=c.table_schema
and t.table_name=c.table_name
and t.table_type ='BASE TABLE' 
order by t.table_schema, t.table_name, c.column_name 
;
Sundar Kannan
fonte