如何在MySQL中获取所有表的所有列名?

248

有没有一种快速的方法在不列出所有表格的情况下从所有表格中获取 MySQL 的全部列名?


2
我只需要快速了解数据库。这不会是应用程序中的代码。 - dieter
12个回答

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

那正是我在寻找的 :-) 我现在写了一个做同样事情的Java应用程序 - dieter
1
谢谢!要仅获取列名,请使用以下语句:select column_name from information_schema.columns where table_schema = 'your_db' order by table_name, ordinal_position - Phil Goetz
正是我所需要的!谢谢。 - zookastos
如何在列名前获取填充数据的计数?我也遇到了同样的问题,还有数据计数。 - Gulmuhammad Akbari
如何了解主键? - David Walser

61

列出 MySQL 数据库表中的所有字段:

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

1
有趣 - 我得到了“where子句中的未知列'column_name'” - brianlmerritt

41

为了更加便于获取所有列名,建议您使用以下查询语句:

Show columns from tablename


1
有时候你需要一个不依赖于 information_schema 的解决方案。 - Bradley M. Davis
同时这只提供了给定表名tablename的列,这并不是 OP 所要求的。 - jmizv

32
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

由于我声望不够,无法进行评论,这里是对nick rulez的精彩回答做出一点小改进(我认为):将WHERE table_schema = 'your_db'替换为WHERE table_schema = DATABASE()


很有帮助。当可以避免硬编码时,像这样的事情总是让我烦恼。谢谢。 - David

25

如果有任何人需要这个信息,以下内容提供了每个表中逗号分隔的列的列表:

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

注意:当使用具有大量列和/或长字段名称的表格时,请注意group_concat_max_len限制,这可能会导致数据被截断。


2
我喜欢这个...因为我可以轻松地复制所有列名。 - 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
任何在2016年阅读此文的人 - mysql_query已经被弃用。最好使用PHP的mysqli。 - JCutting8

5

问题是:

有没有一种快速的方法可以从MySQL中获取所有表的所有列名,而不必列出所有表格?

获取每个列的所有信息的SQL语句

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

获取所有列名的SQL语句

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

5

类似于@suganya发布的答案,这并没有直接回答问题,但对于一个单独的表来说是更快捷的替代方法:

DESCRIBE column_name;

这将打印一个表格,而不仅仅是表格的列名。 - k0pernikus

3

我很久以前写了这个傻瓜式的东西,现在偶尔还会用它:

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

基本上,它执行了一个“SHOW TABLES”,然后对每个表进行了一个“DESCRIBE”,最后将其作为markdown输出。

只需编辑“if name”下面的内容并运行即可。你需要安装pymysql。


2
借助Nicola的答案,这里提供一些易读的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>";

4
一些易读的 PHP 代码。使用 a、b、c 命名变量并不是我所说的易读方式。 - Kaymaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接