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?


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

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'

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


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


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.


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

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


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

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.


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

1
'some readable php' .. Nommer des variables avec a, b, c n'est pas ce que j'appellerais lisible
Kaymaz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.