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


189

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


2
我只需要对数据库进行快速概述。它不会是应用程序中的代码。
节食者

Answers:


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

那就是我一直在寻找的东西:-)编写了一个Java应用程序,做同样的事情
Dieter

谢谢!要仅获取列名,请使用以下方法:从information_schema.columns中选择column_name,其中table_schema ='your_db'按table_name,ording_position的顺序排序
Phil Goetz

正是我想要的!谢谢。
zookastos

如何获得列名前面的已填充数据计数?我有相同的问题以及数据计数
Gulmuhammad Akbari

知道主键怎么样?
David Walser

48

要列出MySQL表中的所有字段:

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


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

因为我没有足够的代表处发表评论,这里有一个小的改进(在我看来)在尼克rulez的出色答卷:更换WHERE table_schema = 'your_db'WHERE table_schema = DATABASE()


有帮助 在可以避免的情况下,我总是烦恼像这样的事情进行硬编码。谢谢。
戴维(David)

17

如果这样做对其他任何人都有用,则会为您提供每个表中列的逗号分隔列表:

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限制,这可能导致数据被截断。


1
我喜欢这个...因为我可以轻松复制所有列名。
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年8


4

问题是:

有没有一种快速方法可以从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

3

我很久以前就写了这个愚蠢的东西,但现在仍然时不时地使用它:

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

基本上,它在每个表上执行“ SHOW TABLES”,然后执行“ DESCRIBE”,然后将其作为markdown吐出。

只需在“ if name ” 下方进行编辑即可。您需要安装pymysql。


3

通过一些可读的PHP搭载Nicola的答案

$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
“一些可读的php”。用a,b,c命名变量不是我所说的可读的
Kaymaz,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.