Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL データベース中に特定をカラム名を含むテーブルを検索する方法

例えば、User_Idというカラム名を含むテーブル名に何か変更をかけないといけないという運用が発生した場合、テーブル定義書に書かれているドキュメントを確認したりしますか?いやいや、とっても効率悪いので、

information_schema.columns

を使いましょうよ!って話です

ドラことば心に響くドラえもん名言集

ドラことば心に響くドラえもん名言集

f:id:hit10231023:20180309104332j:plain

information_schema.columnsで検索

  • User_Id というカラム名は、大文字、小文字を区別したい
  • User_Idを含むカラムを抽出したい
SELECT
  DISTINCT 
  table_schema,
  table_name,
  column_name
FROM
  information_schema.columns
WHERE
  table_schema = 'db2' AND 
  column_name LIKE BINARY '%User_Id%'
;

こんな感じになります。BINARYをつけると、大文字小文字を区別して抽出してくれます。

これを応用して、 User_Idを含むカラムの属性を、一括で変更するDDLを生成したい なんていう場合は、

SELECT
  'ALTER TABLE ' ||
  table_schema || '.' || table_name || 
  ' MODIFY COLUMN ' ||
  column_name || ' varchar(50) NOT NULL ;' AS modify_sql
FROM
  information_schema.columns
WHERE
  table_schema = 'db2' AND 
  column_name LIKE BINARY '%User_Id%'
;

なんて文字列遊びもできちゃいます

+--------------------------------------------------------------------------------------+
| modify_sql                                                                           |
+--------------------------------------------------------------------------------------+
| ALTER TABLE db2.table1 MODIFY COLUMN User_Id varchar(50) NOT NULL ;                 |