2011-04-13 106 views
129

是否有一種快速方法從MySQL中的所有表中獲取所有列名,而不必列出所有表?獲取所有MySQL表中的所有列

+1

我只需要對數據庫的快速概述。它不會是應用程序中的代碼。 – dieter 2011-04-13 11:36:39

回答

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

這就是我正在尋找的:-)寫了一個Java應用程序,現在做相同的東西 – dieter 2011-04-13 11:57:02

+0

謝謝!爲了得到公正的列名,使用:選擇列名來自INFORMATION_SCHEMA.COLUMNS 其中TABLE_SCHEMA =「your_db」 ORDER BY TABLE_NAME和ORDINAL_POSITION – 2015-06-01 21:49:20

+0

正是我一直在尋找!謝謝。 – 2017-05-17 22:41:43

31

要列出一個表的所有字段在MySQL:

select * 
    from information_schema.columns 
where table_schema = 'your_DB_name' 
    and table_name = 'Your_tablename' 
5
<?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 2016-07-31 02:50:55

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

因爲我沒有足夠的代表處發表評論,這裏有一個小的改進(在我看來, )通過尼克rulez的優秀答案:用WHERE table_schema = DATABASE()代替WHERE table_schema = 'your_db'

+0

這很有幫助。當它可以避免的時候,它總是讓我感到困難。謝謝。 – David 2015-08-27 22:01:35

2

我很久以前寫的這個愚蠢的事情,實際上仍然時不時地使用它:

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

基本上,它在每個表中的「SHOW TABLES」,然後是「描述」,然後將其吐出作爲降價。

只需編輯下面的「如果名稱」並去。你需要安裝pymysql。

11

上,它是給其他人有用的offchance,這會給你一個逗號分隔的每個表中的列的列表:

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 

注:當使用表高的列數和/或使用長字段名稱時,請注意限制,這可能會導致數據被截斷。

+0

我喜歡這一個...因爲我可以很容易地複製所有的列名稱。 – jatazoulja 2018-02-01 01:18:11

14

最好是您使用以下查詢來獲取所有列名 容易

Show columns from tablename

+2

從命令中得到了類似的結果:DESCRIBE tablename; – dkb 2017-05-02 17:40:25

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>"; 
3

類似到answer posted by @suganya這並不直接回應任務離子但對單個表一個更快的選擇:

DESCRIBE column_name; 
+0

這將打印一張表格,而不僅僅是表格的列名稱。 – k0pernikus 2017-06-28 15:35:11

0

的問題是:

有沒有得到從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