¿Cómo obtener los nombres de todas las columnas para todas las tablas en MySQL?

189

¿Existe una forma rápida de obtener todos los nombres de columna de todas las tablas MySQL, sin tener que enumerar todas las tablas?

dieter
fuente
2
Solo necesito una descripción general rápida de la base de datos. No va a ser código en una aplicación.
dieter

Respuestas:

304
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
Nicola Cossu
fuente
eso era lo que estaba buscando :-) Escribí una aplicación Java haciendo lo mismo por ahora
dieter
¡Gracias! Para obtener solo los nombres de columna, use esto: seleccione column_name de information_schema.columns donde table_schema = 'your_db' ordene por table_name, ordinal_position
Phil Goetz
Exactamente lo que estaba buscando ! Gracias.
zookastos
¿Qué tal obtener el recuento de datos rellenos delante de los nombres de columna? Tengo el mismo problema más el recuento de datos
Gulmuhammad Akbari,
¿Qué tal saber la clave primaria?
David Walser
48

Para enumerar todos los campos de una tabla en MySQL:

select * 
  from information_schema.columns 
 where table_schema = 'your_DB_name' 
   and table_name = 'Your_tablename'
suganya
fuente
27
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

Como no tengo suficiente representante para comentar, aquí hay una pequeña mejora (en mi opinión) sobre la excelente respuesta de nick rulez: reemplazar WHERE table_schema = 'your_db'con WHERE table_schema = DATABASE().

appel
fuente
Eso es útil Siempre me molesta codificar cosas así cuando se puede evitar. Gracias.
David
27

es mejor que use la siguiente consulta para obtener todos los nombres de columna fácilmente

Show columns from tablename

rajesh satpute
fuente
A veces necesitas una solución que no se base en información_esquema
Bradley M. Davis
17

En el caso de que sea útil para cualquier otra persona, esto le dará una lista delimitada por comas de las columnas en cada tabla:

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: Cuando use tablas con un gran número de columnas y / o con nombres de campo largos, tenga en cuenta el límite group_concat_max_len , que puede hacer que los datos se trunquen.

trapper_hag
fuente
1
Me gusta este ... ya que podría copiar fácilmente todos los nombres de columna.
jatazoulja 01 de
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
fuente
1
Cualquiera que lea esto en 2016: mysql_query ha quedado en desuso. Lo mejor es usar mysqli de PHP en el futuro.
JCutting8
5

Similar a la respuesta publicada por @suganya, esto no responde directamente a la pregunta, pero es una alternativa más rápida para una sola tabla:

DESCRIBE column_name;
Philip Kirkbride
fuente
Esto imprimirá una tabla y no solo los nombres de columna de la tabla.
k0pernikus
4

La pregunta fue:

¿Existe una forma rápida de obtener todos los NOMBRES DE COLUMNA de todas las tablas en MySQL, sin tener que enumerar todas las tablas?

SQL para obtener toda la información para cada columna

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

SQL para obtener todos los NOMBRES DE COLUMNA

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

Escribí esta tontería hace mucho tiempo y todavía la uso de vez en cuando:

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

Básicamente, hace un "MOSTRAR TABLAS", luego un "DESCRIBE" en cada mesa, luego lo escupe como rebaja.

Simplemente edita debajo del " nombre if " y listo. Necesitarás tener pymysql instalado.

lisdexia
fuente
3

Piggybacking en la respuesta de Nicola con un php legible

$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
fuente
1
'php legible'. Nombrar variables con a, b, c no es lo que yo llamaría legible
Kaymaz