Como obter os nomes de todas as colunas para todas as tabelas no MySQL?

189

Existe uma maneira rápida de obter todos os nomes de colunas de todas as tabelas MySQL, sem precisar listar todas as tabelas?

dieter
fonte
2
Eu só preciso de uma rápida visão geral sobre o banco de dados. Não vai ser código em um aplicativo.
Dieter

Respostas:

304
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
Nicola Cossu
fonte
isso era o que eu estava procurando :-) escrevi um aplicativo java fazendo a mesma coisa agora
dieter
Obrigado! Para obter apenas os nomes das colunas, use este: column_name selecione a partir INFORMATION_SCHEMA.COLUMNS onde table_schema = 'your_db' ordem por table_name, ORDINAL_POSITION
Phil Goetz
Exatamente o que eu estava procurando ! Obrigado.
Zookastos 17/05/19
Que tal obter a contagem de dados preenchidos na frente dos nomes das colunas? Eu tenho o mesmo problema, mais dados de contagem
Gulmuhammad Akbari
Que tal conhecer a chave primária?
David Walser
48

Para listar todos os campos de uma tabela no MySQL:

select * 
  from information_schema.columns 
 where table_schema = 'your_DB_name' 
   and table_name = 'Your_tablename'
suganya
fonte
27

é melhor usar a consulta a seguir para obter todos os nomes de colunas facilmente

Show columns from tablename

rajesh satpute
fonte
Às vezes você precisa de uma solução que não depende de information_schema
Bradley M. Davis
26
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

Como não tenho representante suficiente para comentar, aqui está uma pequena melhoria (na minha opinião) da excelente resposta de nick rulez: substituir WHERE table_schema = 'your_db'por WHERE table_schema = DATABASE().

appel
fonte
Isso é útil. Sempre me irrita codificar coisas assim quando pode ser evitado. Obrigado.
David
17

Por mais que seja útil para qualquer outra pessoa, isso fornecerá uma lista delimitada por vírgula das colunas em cada tabela:

SELECT table_name,GROUP_CONCAT(column_name ORDER BY ordinal_position)
FROM information_schema.columns
WHERE table_schema = DATABASE()
GROUP BY table_name
ORDER BY table_name

Nota: Ao usar tabelas com um número alto de colunas e / ou com nomes longos de campos, esteja ciente do limite de group_concat_max_len , que pode causar truncamento dos dados.

trapper_hag
fonte
1
Eu gosto deste ... pois eu poderia copiar facilmente todos os nomes de colunas.
precisa saber é o seguinte
6
<?php
        $table = 'orders';
        $query = "SHOW COLUMNS FROM $table";
        if($output = mysql_query($query)):
            $columns = array();
            while($result = mysql_fetch_assoc($output)):
                $columns[] = $result['Field'];
            endwhile;
        endif;
        echo '<pre>';
        print_r($columns);
        echo '</pre>';
?>
Ali Nawaz
fonte
1
Qualquer pessoa que esteja lendo isso em 2016 - mysql_query tornou-se obsoleto. Melhor usar o mysqli do PHP daqui para frente.
JCutting8
5

Semelhante à resposta postada por @suganya, isso não responde diretamente à pergunta, mas é uma alternativa mais rápida para uma única tabela:

DESCRIBE column_name;
Philip Kirkbride
fonte
Isso imprimirá uma tabela e não apenas os nomes das colunas da tabela.
k0pernikus
4

A questão era:

Existe uma maneira rápida de obter todos os NOMES DE COLUNAS de todas as tabelas no MySQL, sem precisar listar todas as tabelas?

SQL para obter todas as informações para cada coluna

select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position

SQL para obter todos os NOMES DE COLUNAS

select COLUMN_NAME from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
J.BizMai
fonte
3

Escrevi essa coisa boba há muito tempo e ainda a uso de vez em quando:

https://gist.github.com/kphretiq/e2f924416a326895233d

Basicamente, ele faz um "SHOW TABLES", depois um "DESCRIBE" em cada tabela e o cospe como remarcação.

Basta editar abaixo do "if name " e pronto. Você precisará ter o pymysql instalado.

lisdexia
fonte
3

Pegando carona na resposta de Nicola com algum php legível

$a = mysqli_query($conn,"select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position");
$b = mysqli_fetch_all($a,MYSQLI_ASSOC);
$d = array();
foreach($b as $c){
    if(!is_array($d[$c['TABLE_NAME']])){
        $d[$c['TABLE_NAME']] = array();
    }
    $d[$c['TABLE_NAME']][] = $c['COLUMN_NAME'];
}
echo "<pre>",print_r($d),"</pre>";
Scot Nery
fonte
1
'alguns php legível' .. variáveis Naming com a, b, c não é o que eu chamaria legível
Kaymaz