248

Is there a fast way of getting all column names from all tables in MySQL, without having to list all the tables?

dreftymac
  • 31,404
  • 26
  • 119
  • 182
dieter
  • 2,551
  • 3
  • 17
  • 6

12 Answers12

401
select column_name from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
João Pimentel Ferreira
  • 14,289
  • 10
  • 80
  • 109
Nicola Cossu
  • 54,599
  • 15
  • 92
  • 98
59

To list all the fields from a table in MySQL:

select * 
  from information_schema.columns 
 where table_schema = 'your_DB_name' 
   and table_name = 'Your_tablename'
Ben
  • 51,770
  • 36
  • 127
  • 149
suganya
  • 591
  • 4
  • 2
41

it is better that you use the following query to get all column names easily

Show columns from tablename

Community
  • 1
  • 1
rajesh satpute
  • 411
  • 4
  • 4
31
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

Since I don't have enough rep to comment, here's a minor improvement (in my view) over nick rulez's excellent answer: replacing WHERE table_schema = 'your_db' with WHERE table_schema = DATABASE().

appel
  • 423
  • 4
  • 10
  • That's helpful. It always annoys me to hardcode things like that when it can be avoided. Thanks. – David Aug 27 '15 at 22:01
25

On the offchance that it's useful to anyone else, this will give you a comma-delimited list of the columns in each table:

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

Note : When using tables with a high number of columns and/or with long field names, be aware of the group_concat_max_len limit, which can cause the data to get truncated.

IceNV
  • 5
  • 1
  • 3
trapper_hag
  • 780
  • 9
  • 14
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>';
?>
Madhu
  • 2,429
  • 16
  • 31
Ali Nawaz
  • 1,006
  • 10
  • 11
  • 1
    Anyone reading this in 2016 - mysql_query has become deprecated. Best to use PHP's mysqli going forward. – JCutting8 Jul 31 '16 at 02:50
5

Similar to the answer posted by @suganya this doesn't directly answer the question but is a quicker alternative for a single table:

DESCRIBE column_name;
Community
  • 1
  • 1
Philip Kirkbride
  • 21,381
  • 38
  • 125
  • 225
5

The question was :

Is there a fast way of getting all COLUMN NAMES from all tables in MySQL, without having to list all the tables?

SQL to get all information for each column

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

SQL to get all COLUMN NAMES

select COLUMN_NAME from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position
J.BizMai
  • 2,621
  • 3
  • 25
  • 49
3

I wrote this silly thing a long time ago and still actually use it now and then:

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

Basically, it does a "SHOW TABLES", then a "DESCRIBE " on each table, then spits it out as markdown.

Just edit below the "if name" and go. You'll need to have pymysql installed.

lysdexia
  • 1,786
  • 18
  • 29
2

Piggybacking on Nicola's answer with some readable 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
  • 671
  • 7
  • 19
2

You can query all columns per table in specific database using this query

select
    TABLE_SCHEMA,
    TABLE_NAME,
    COLUMN_NAME
from
    information_schema.columns
where
    table_schema = 'database_name'
order by 
    table_name,
    ordinal_position;
Alon Barad
  • 1,491
  • 1
  • 13
  • 26
0

You can simply get all columns of a table using information_schema.columns just add group_concat to get a comma separated list of columns.

select group_concat( column_name ) as ColumnNames from information_schema.columns where table_schema = 'ur_db_name' and table_name = 'ur_tbl_name'