MySQL データベース中に特定をカラム名を含むテーブルを検索する方法
例えば、User_Idというカラム名を含むテーブル名に何か変更をかけないといけないという運用が発生した場合、テーブル定義書に書かれているドキュメントを確認したりしますか?いやいや、とっても効率悪いので、
information_schema.columns
を使いましょうよ!って話です- 作者: 小学館ドラえもんルーム
- 出版社/メーカー: 小学館
- 発売日: 2006/09/01
- メディア: 単行本
- 購入: 18人 クリック: 260回
- この商品を含むブログ (65件) を見る
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 ; |