web-dev-qa-db-fra.com

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

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

167
dieter
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
267
Nicola Cossu

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'
44
suganya
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

Étant donné que 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().

25
appel

il est préférable que vous utilisiez la requête suivante pour obtenir facilement tous les noms de colonnes

Show columns from tablename

24
rajesh satpute

S'il est utile à quiconque, cela vous donnera une liste délimitée par des virgules des colonnes de chaque tableau:

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: Si vous utilisez des tables avec un nombre élevé de colonnes et/ou de noms de champs longs, tenez compte de la limite group_concat_max_len , qui peut entraîner la troncature des données. .

17
trapper_hag
<?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>';
?>
6
Ali Nawaz

Similaire au 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;
4
Philip Kirkbride

Piggybacking sur la réponse de Nicola avec un 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>";
3
Scot Nery

J'ai écrit cette chose stupide 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 crache comme une démarque.

Éditez juste en dessous du "si nom " et c'est parti. Vous aurez besoin d'avoir pymysql installé.

3
lysdexia

La question était:

Existe-t-il un moyen rapide d’obtenir tous les noms de colonne de toutes les tables de MySQL sans avoir à répertorier 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
2
J.BizMai