MySQLでテーブルの列名とデータ型を抽出する方法
MySQLでテーブルに含まれる列名(カラム名)とそのデータ型を一覧として取得したい場合は、INFORMATION_SCHEMA.COLUMNS テーブルを利用するのが便利です。この方法を使えば、SQLを1つ実行するだけで、指定したデータベース・テーブル内のすべての列の情報を簡単に抽出できます。
INFORMATION_SCHEMA.COLUMNSとは
INFORMATION_SCHEMA.COLUMNS は、MySQLサーバーが管理しているメタデータ(スキーマ情報)を格納するシステムビューの一つです。データベース名(table_schema)やテーブル名(table_name)、列名(column_name)、データ型(data_type)などの情報が行ごとに記録されています。
基本となるクエリ構文
列名とデータ型を「列名=データ型」の形式で抽出するには、次のように CONCAT() 関数と組み合わせます。
SELECT CONCAT(column_name, '=', data_type) AS 任意の別名 FROM information_schema.columns WHERE table_schema = 'データベース名' AND table_name = 'テーブル名';
実例:サンプルテーブルを作成して確認する
まず、動作確認用のテーブルを作成します。ここでは、int型、varchar型、boolean型、ENUM型など、複数のデータ型を含むテーブルを用意しました。
mysql> CREATE TABLE DemoTable1812
-> (
-> Id INT,
-> FirstName VARCHAR(20),
-> Age INT,
-> isMarried BOOLEAN,
-> status ENUM('ACTIVE','INACTIVE')
-> );
Query OK, 0 rows affected (0.00 sec)列名とデータ型を抽出するクエリ
続いて、作成したテーブルから列名とデータ型を抽出します。ここでは、データベース名を 'web'、テーブル名を 'DemoTable1812' として指定しています。実際に使用する際は、ご自身の環境に合わせて書き換えてください。
mysql> SELECT CONCAT(column_name, '=', data_type) AS COLUMNNAMEANDTYPE
-> FROM information_schema.columns
-> WHERE table_schema = 'web' AND table_name = 'DemoTable1812';実行結果
上記のクエリを実行すると、以下のような結果が出力されます。各列の名前とデータ型が一目でわかる形で表示されます。
+-------------------+ | COLUMNNAMEANDTYPE | +-------------------+ | Id=int | | FirstName=varchar | | Age=int | | isMarried=tinyint | | status=enum | +-------------------+ 5 rows in set (0.00 sec)
補足ポイント
- BOOLEAN型について: MySQLでは
booleanはtinyint(1)のエイリアス(別名)であるため、出力結果では「tinyint」と表示されます。 - 文字数制限も取得可能: varcharの最大文字数などが必要な場合は、
character_maximum_length列をSELECT文に追加すると取得できます。 - 順序を指定したい場合:
ORDER BY ordinal_positionを追加すると、テーブル定義どおりの列順で結果を取得できます。
このように、INFORMATION_SCHEMA.COLUMNS を活用すれば、テーブル構造の調査やドキュメント化作業を効率的に進めることができます。
-
MySQLで文字列から日付を抽出する方法|SUBSTRING_INDEX関数の実践的な使い方
MySQLで文字列から日付を抽出するには?MySQLで文字列の中から日付部分だけを取り出したい場合、SUBSTRING_INDEX() 関数を使うのが便利です。この関数は、指定した区切り文字を基準に文字列を分割し、必要な部分を取得できます。ここでは、実際にテーブルを作成し、文章の中に含まれる日付(例:12/31/2018)を抽出する手順を解説します。1. サンプルテーブルを作成するまず、文字列を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> Title text -> );Query OK
-
MySQLで予約語「from」を列名として使用する方法
MySQLで「from」を列名として使うには? MySQLでは「from」は予約語(リザーブドワード)として登録されているため、そのまま列名として使用するとエラーが発生します。しかし、バッククォート(`` ` ``)で囲むことで、予約語である「from」を列名として扱うことができます。 この記事では、実際にテーブルを作成し、「from」を列名としてデータの挿入や取得を行う手順を解説します。 1. バッククォートを使ってテーブルを作成する まず、列名「from」をバッククォートで囲んでテーブルを作成します。以下のSQLを実行してください。 mysql> create table Demo