Wie erhalte ich alle Spaltennamen für alle Tabellen in MySQL?

189

Gibt es eine schnelle Möglichkeit, alle Spaltennamen aus allen Tabellen abzurufen MySQL, ohne alle Tabellen auflisten zu müssen?

Dieter
quelle
2
Ich brauche nur einen kurzen Überblick über die Datenbank. Es wird kein Code in einer App sein.
Dieter

Antworten:

304
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
Nicola Cossu
quelle
das war es, wonach ich gesucht habe :-) Schrieb eine Java-App, die mittlerweile das Gleiche tut
Dieter
Vielen Dank! Um nur die Spaltennamen zu erhalten, verwenden Sie Folgendes: Wählen Sie Spaltenname aus information_schema.columns aus, wobei table_schema = 'your_db' nach Tabellenname ordinal_position
Phil Goetz
Genau das, wonach ich gesucht habe! Vielen Dank.
Zookastos
Wie wäre es, die Anzahl der gefüllten Daten vor den Spaltennamen zu erhalten? Ich habe das gleiche Problem plus
Datenzahl
Wie wäre es mit der Kenntnis des Primärschlüssels?
David Walser
48

So listen Sie alle Felder aus einer Tabelle in MySQL auf:

select * 
  from information_schema.columns 
 where table_schema = 'your_DB_name' 
   and table_name = 'Your_tablename'
Suganya
quelle
27

Es ist besser, wenn Sie die folgende Abfrage verwenden, um alle Spaltennamen einfach abzurufen

Show columns from tablename

Rajesh Satpute
quelle
Manchmal brauchen Sie eine Lösung, die nicht auf information_schema beruht
Bradley M. Davis
26
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

Da ich nicht genug Repräsentanten habe, um Kommentare abzugeben, ist hier (meiner Ansicht nach) eine geringfügige Verbesserung gegenüber der hervorragenden Antwort von Nick Rulez: Ersetzen WHERE table_schema = 'your_db'durch WHERE table_schema = DATABASE().

appel
quelle
Das ist hilfreich. Es ärgert mich immer, solche Dinge fest zu codieren, wenn es vermieden werden kann. Vielen Dank.
David
17

Wenn dies für andere nützlich ist, erhalten Sie eine durch Kommas getrennte Liste der Spalten in jeder Tabelle:

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

Hinweis: Wenn Sie Tabellen mit einer hohen Anzahl von Spalten und / oder langen Feldnamen verwenden, beachten Sie das Limit group_concat_max_len , das dazu führen kann, dass die Daten abgeschnitten werden.

trapper_hag
quelle
1
Ich mag dieses ... da ich leicht alle Spaltennamen kopieren konnte.
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
quelle
1
Wer dies 2016 liest - mysql_query ist veraltet. Verwenden Sie am besten PHPs MySQL für die Zukunft.
JCutting8
5

Ähnlich wie bei der Antwort von @suganya beantwortet dies die Frage nicht direkt, ist jedoch eine schnellere Alternative für eine einzelne Tabelle:

DESCRIBE column_name;
Philip Kirkbride
quelle
Dadurch wird eine Tabelle gedruckt und nicht nur die Spaltennamen der Tabelle.
k0pernikus
4

Die Frage war:

Gibt es eine schnelle Möglichkeit, alle SPALTENNAMEN aus allen Tabellen in MySQL abzurufen, ohne alle Tabellen auflisten zu müssen?

SQL, um alle Informationen für jede Spalte abzurufen

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

SQL, um alle SPALTENNAMEN zu erhalten

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

Ich habe dieses dumme Ding vor langer Zeit geschrieben und benutze es immer noch ab und zu:

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

Grundsätzlich führt es eine "SHOW TABLES", dann eine "DESCRIBE" für jede Tabelle aus und spuckt sie dann als Markdown aus.

Bearbeiten Sie einfach unter dem "Wenn- Namen " und gehen Sie. Sie müssen pymysql installiert haben.

Lysdexie
quelle
3

Huckepack auf Nicolas Antwort mit etwas lesbarem PHP

$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
quelle
1
'einige lesbare PHP' .. Variablen mit a, b, c zu benennen ist nicht das, was ich als lesbar bezeichnen würde
Kaymaz