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?


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

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'

27

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

Show columns from tablename


À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().


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.


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>';
?>

1
Qualquer pessoa que esteja lendo isso em 2016 - mysql_query tornou-se obsoleto. Melhor usar o mysqli do PHP daqui para frente.
JCutting8


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


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>";

1
'alguns php legível' .. variáveis Naming com a, b, c não é o que eu chamaria legível
Kaymaz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.