MySQLのデータディクショナリの活用例

テーブル名からDDLを生成するライブラリ作成の過程で
MySQLデータディクショナリを活用したので活用例を記しておきます。
なお、MySQL 5.6.15にて動作を確認しております。
まずは基本的な部分から。

・テーブル一覧
SELECT * FROM INFORMATION_SCHEMA.TABLES
ORDER BY table_schema, table_name

・各テーブルの列定義一覧
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
ORDER BY table_schema, table_name, column_name

・制約情報一覧(主キーや外部キーなど)
SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
ORDER BY table_schema, table_name, constraint_name, ordinal_position

実際には以下のようにスキーマやテーブル名、列の定義内容で絞り込んで使う機会が多いかと。
テーブル名、列の定義順などでソートするにはtable_name、ordinal_positionを
ORDER BY句に指定します。

・テーブル名に「log」を含むテーブル一覧(スキーマ絞り込み)
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = 'develop'
AND   table_name like '%log%'
ORDER BY table_name

・自動インクリメントが定義されている列とテーブルの一覧
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE EXTRA = 'auto_increment'
ORDER BY table_schema, table_name, column_name

・列の主要な属性に絞り込んだ一覧(列の定義順でソート)
SELECT
  table_name, ordinal_position, column_name, data_type,
  column_default, is_nullable, character_maximum_length,
  numeric_precision, numeric_scale
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'develop'
ORDER BY table_name, ordinal_position

・各テーブルの制約情報一覧(スキーマで絞り込み)
SELECT table_name, constraint_name, ordinal_position, column_name
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE table_schema = 'develop'
ORDER BY table_name, constraint_name, ordinal_position