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?


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

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'

27

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

Show columns from tablename


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


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.


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

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;

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

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.


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

1
'einige lesbare PHP' .. Variablen mit a, b, c zu benennen ist nicht das, was ich als lesbar bezeichnen würde
Kaymaz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.