Comment obtenir les noms de toutes les colonnes pour toutes les tables dans MySQL?

189

Existe-t-il un moyen rapide d'obtenir tous les noms de colonnes de toutes les tables MySQL, sans avoir à répertorier toutes les tables?

dieter
la source
2
Je n'ai besoin que d'un aperçu rapide de la base de données. Ce ne sera pas du code dans une application.
dieter

Réponses:

304
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
Nicola Cossu
la source
c'était ce que je cherchais :-) J'ai écrit une application java faisant la même chose maintenant
dieter
Merci! Pour obtenir uniquement les noms de colonnes, utilisez ceci: sélectionnez nom_colonne dans schema_information.colonnes où table_schema = 'your_db' order by table_name, ordinal_position
Phil Goetz
Exactement ce que je cherchais! Merci.
zookastos
Que diriez-vous d'obtenir le nombre de données remplies devant les noms de colonne? J'ai le même problème plus le nombre de données
Gulmuhammad Akbari
que diriez-vous de connaître la clé primaire?
David Walser
48

Pour lister tous les champs d'une table dans MySQL:

select * 
  from information_schema.columns 
 where table_schema = 'your_DB_name' 
   and table_name = 'Your_tablename'
Suganya
la source
27
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

Comme je n'ai pas assez de représentants pour commenter, voici une amélioration mineure (à mon avis) par rapport à l'excellente réponse de nick rulez: remplacer WHERE table_schema = 'your_db'par WHERE table_schema = DATABASE().

appel
la source
Cela est utile. Cela m'ennuie toujours de coder en dur des choses comme ça quand cela peut être évité. Merci.
David
27

il est préférable d'utiliser la requête suivante pour obtenir facilement tous les noms de colonnes

Show columns from tablename

rajesh satpute
la source
Parfois, vous avez besoin d'une solution qui ne repose pas sur information_schema
Bradley M. Davis
17

Au cas où cela serait utile à quelqu'un d'autre, cela vous donnera une liste délimitée par des virgules des colonnes de chaque table:

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

Remarque: lorsque vous utilisez des tables avec un nombre élevé de colonnes et / ou avec des noms de champ longs, tenez compte de la limite group_concat_max_len , ce qui peut entraîner la troncature des données.

trapper_hag
la source
1
J'aime celui-ci ... car je pourrais facilement copier tous les noms de colonnes.
jatazoulja
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
la source
1
Quiconque lit ceci en 2016 - mysql_query est devenu obsolète. Il est préférable d'utiliser le mysqli de PHP à l'avenir.
JCutting8
5

Semblable à la réponse publiée par @suganya, cela ne répond pas directement à la question mais constitue une alternative plus rapide pour une seule table:

DESCRIBE column_name;
Philip Kirkbride
la source
Cela imprimera une table et pas seulement les noms de colonne de la table.
k0pernikus
4

La question était:

Existe-t-il un moyen rapide d'obtenir tous les NOMS DE COLONNES de toutes les tables de MySQL, sans avoir à lister toutes les tables?

SQL pour obtenir toutes les informations pour chaque colonne

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

SQL pour obtenir tous les NOMS DE COLONNE

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

J'ai écrit cette chose idiote il y a longtemps et je l'utilise encore de temps en temps:

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

Fondamentalement, il fait un "SHOW TABLES", puis un "DESCRIBE" sur chaque table, puis le recrache comme démarque.

Modifiez simplement sous le "si nom " et c'est parti. Vous devrez avoir installé pymysql.

lysdexie
la source
3

Utilisation de la réponse de Nicola avec du PHP lisible

$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
la source
1
'some readable php' .. Nommer des variables avec a, b, c n'est pas ce que j'appellerais lisible
Kaymaz