Come ottenere i nomi di tutte le colonne per tutte le tabelle in MySQL?


189

Esiste un modo rapido per ottenere tutti i nomi di colonna da tutte le tabelle MySQL, senza dover elencare tutte le tabelle?


2
Ho solo bisogno di una rapida panoramica sul database. Non sarà un codice in un'app.
Dieter,

Risposte:


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

era quello che stavo cercando :-) Ho scritto un'app java facendo le stesse cose ormai
dieter

Grazie! Per ottenere solo i nomi delle colonne, utilizzare questo: selezionare nome_colonna da information_schema.columns dove table_schema = 'your_db' ordina per table_name, ordinal_position
Phil Goetz

Esattamente quello che stavo cercando! Grazie.
zookastos,

Che ne dici di ottenere il conteggio dei dati riempiti davanti ai nomi delle colonne? Ho lo stesso problema più il conteggio dei dati
Gulmuhammad Akbari,

che ne dici di conoscere la chiave primaria?
David Walser,

48

Per elencare tutti i campi da una tabella in 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

Dal momento che non ho abbastanza rappresentante per commentare, ecco un piccolo miglioramento (a mio avviso) rispetto all'eccellente risposta di nick rulez: la sostituzione WHERE table_schema = 'your_db'con WHERE table_schema = DATABASE().


È utile Mi da sempre fastidio scrivere cose del genere quando può essere evitato. Grazie.
David,

27

è meglio utilizzare la seguente query per ottenere facilmente tutti i nomi di colonna

Show columns from tablename


A volte hai bisogno di una soluzione che non si basi su information_schema
Bradley M. Davis,

17

In caso contrario è utile a chiunque altro, questo ti darà un elenco delimitato da virgole delle colonne in ogni tabella:

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

Nota: quando si utilizzano tabelle con un numero elevato di colonne e / o con nomi di campi lunghi, tenere presente il limite group_concat_max_len , che può causare il troncamento dei dati.


1
Mi piace questo ... dal momento che potrei facilmente copiare tutti i nomi delle colonne.
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
Chiunque abbia letto questo nel 2016 - mysql_query è diventato obsoleto. Meglio usare il mysqli di PHP in futuro.
JCutting8


4

La domanda era:

Esiste un modo rapido per ottenere tutti i COLOMN NAMES da tutte le tabelle in MySQL, senza dover elencare tutte le tabelle?

SQL per ottenere tutte le informazioni per ogni colonna

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

SQL per ottenere tutti i nomi delle colonne

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


3

Piggybacking sulla risposta di Nicola con qualche php leggibile

$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 php leggibile' .. La denominazione delle variabili con a, b, c non è quella che definirei leggibile
Kaymaz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.