MySQLのすべてのテーブルのすべての列の名前を取得するにはどうすればよいですか?


189

すべてのテーブルMySQLをリストする必要なしに、のすべてのテーブルからすべての列名を取得する高速な方法はありますか?


2
データベースの概要をすばやく確認するだけです。アプリのコードにはなりません。
ダイエット

回答:


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

それが私が探していたものでした:-)これまでに同じことをしているJavaアプリを書きました
ダイエッター

ありがとう!TABLE_NAME、ORDINAL_POSITIONによってinformation_schema.columnsどこTABLE_SCHEMA =「your_db」オーダーから選択COLUMN_NAME:ちょうどカラム名を取得するには、これを使用する
フィル・ゲッツ

まさに私が探していたもの!ありがとう。
zookastos

列名の前にある埋められたデータの数を取得するにはどうすればよいですか?私は同じ問題とデータカウントを持っています
Gulmuhammad Akbari

主キーを知ることはどうですか?
デビッド

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

コメントするのに十分な担当者がいないため、ニック・ルーズの優れた答えである(私の見解では)小さな改善WHERE table_schema = 'your_db'がありWHERE table_schema = DATABASE()ます。


それは役に立ちます。それを回避できる場合、そのようなことをハードコードすることはいつも私を困らせます。ありがとう。
デビッド

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 2016


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」を実行し、それをマークダウンとして吐き出します。

「if name」の下を編集するだけです。pymysqlをインストールする必要があります。


3

いくつかの読みやすい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>";

1
'一部の読み取り可能なphp' .. a、b、cを使用した変数の命名は、私が読み取り可能と呼ぶものではありません
Kaymaz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.