2016-10-26 6 views
0

table_schema='foo'(データベース名)の各テーブルからshow indexにします。エラーからinformation_schemaで不明なテーブル 'table_name'

mysql> show index from table_name from information_schema.tables where table_schema='foo'; 
ERROR 1109 (42S02): Unknown table 'table_name' in information_schema 

、私は、クエリがinformation_schemaでテーブルとして'table_name'扱うことがわかります。 'table_name'を列として扱うためのクエリを書き換えてinformation_schema.tablesに書き換えるにはどうすればよいですか?

+0

私はこれがあなたが探しているものだと信じています:http://stackoverflow.com/questions/5213339/how-to-see-indexes-for-a-database-or-table – commanderZiltoid

+0

なぜあなたは、 from table_name from'は有効な構文ですか?それは受け入れられるものにも近くない。 –

答えて

0

これは間違っており、存在しない構文を構成しています。

インデックスを取得する方法は、TABLESテーブルではなく、INFORMATION_SCHEMA.STATISTICSテーブルを読み取ることです。

次のクエリはSHOW INDEXESと同じ列があります。

SELECT table_name AS `Table`, Non_unique, index_name AS Key_name, 
    Seq_in_index, Column_name, Collation, Cardinality, Sub_part, 
    Packed, Nullable, Index_type, Comment, Index_comment 
FROM INFORMATION_SCHEMA.STATISTICS 
WHERE table_schema = 'foo'; 

あなたは「索引」と呼ばれるI_Sテーブルがあるはずだと思うかもしれないが、実際には、インデックスオブジェクトのためのシステム・テーブルが「STATISTICS」と命名されます。 Go figure。

+0

これは私の望む結果をもたらします。しかし、すべてのテーブルをプログラムで入力するのではなく、すべてのテーブルをプログラムで取得する方法はありますか?また、私はあなたのクエリがより良いアプローチであることを認識していますが、もともと私がやろうとしていたことに対する構文がありますか?基本的に、別のクエリによって返されたリストの各項目に対してクエリを実行します。 – onepiece

+0

いいえ、SHOW INDEXESが別のクエリの結果をテーブルのリストとして取得する構文はありません。あなたはテーブルのリストを取得するためにクエリを実行し、第2ステップとして、 'SHOW INDEXES ...'ステートメントで動的SQLクエリを構築する必要があります。 –

関連する問題