MySQLで全テーブルから特定のカラムを検索する方法|INFORMATION_SCHEMAの活用
MySQLでカラムの存在を確認する基本アプローチ
MySQLにおいて、データベース内のどのテーブルに特定のカラムが存在するかを調べたい場面は少なくありません。そんなときに役立つのが、システムビューである INFORMATION_SCHEMA.COLUMNS です。このビューを参照することで、スキーマ全体を横断して目的のカラムを持つテーブルを一括で特定できます。
基本的な構文は以下のとおりです。
SELECT table_name, column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = SCHEMA()
AND column_name = '任意のカラム名';
- table_schema = SCHEMA():現在接続中のデータベース(スキーマ)に絞り込みます。
- column_name:検索したいカラム名を指定します。
実行例:EmployeeAge カラムを含むテーブルを探す
ここでは、「EmployeeAge」というカラムがどのテーブルに存在するかを確認してみましょう。
mysql> SELECT table_name, column_name
-> FROM INFORMATION_SCHEMA.COLUMNS
-> WHERE table_schema = SCHEMA()
-> AND column_name = 'EmployeeAge';
このクエリを実行すると、「EmployeeAge」カラムを保持しているテーブルの一覧が次のように表示されます。
+---------------+-------------+
| TABLE_NAME | COLUMN_NAME |
+---------------+-------------+
| demotable1153 | EmployeeAge |
| demotable1297 | EmployeeAge |
| demotable1303 | EmployeeAge |
| demotable1328 | EmployeeAge |
| demotable1378 | EmployeeAge |
| demotable1530 | EmployeeAge |
| demotable1559 | EmployeeAge |
| demotable1586 | EmployeeAge |
| demotable1798 | EmployeeAge |
| demotable1901 | EmployeeAge |
| demotable511 | EmployeeAge |
| demotable912 | EmployeeAge |
+---------------+-------------+
12 rows in set (0.00 sec)
この結果から、現在のデータベース内には合計 12個のテーブル が「EmployeeAge」カラムを持っていることがわかります。
結果の検証:DESCコマンドでテーブル構造を確認
取得した結果が正しいことを証明するために、表示されたテーブルのいずれかの構造を DESC コマンドで確認してみます。
mysql> DESC demotable1153;
実行すると、次のように「demotable1153」に「EmployeeAge」カラムが確かに存在していることが確認できます。
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| EmployeeId | int(11) | NO | PRI | NULL | auto_increment |
| EmployeeName | varchar(40) | YES | MUL | NULL | |
| EmployeeAge | int(11) | YES | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
まとめ
INFORMATION_SCHEMA.COLUMNS を活用すれば、複数のテーブルにまたがるカラムの有無を簡単かつ正確に調査できます。大規模なデータベースの保守や、スキーマ変更前の影響範囲の把握などにも非常に便利な手法なので、ぜひ覚えておきましょう。
-
MySQLで特定のカラム名を持つテーブルを検索する方法
MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a
-
MySQLサーバー上のすべてのデータベース・すべてのテーブルにSELECT権限を付与する方法
MySQLですべてのデータベース・すべてのテーブルにSELECT権限を付与するには?MySQLサーバー上のすべてのデータベースのすべてのテーブルに対してSELECT権限を付与したい場合は、GRANT SELECTステートメントを使用します。対象にワイルドカード「*.*」を指定することで、サーバー上の全データベース・全テーブルが一括して権限付与の対象となります。基本構文GRANT SELECT ON *.* TO yourUserName@yourHostName;手順1:既存ユーザーとホストの一覧を確認するまず、mysql.userテーブルを参照して、登録されているユーザー名とホストの一覧を確