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