MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで特定のテーブルの主キー(列名)を取得する方法

MySQLでは、INFORMATION_SCHEMA.KEY_COLUMN_USAGE テーブルを参照することで、任意のテーブルに設定されている主キー(PRIMARY KEY)の列名を簡単に確認できます。この記事では、サンプルテーブルを作成し、主キーの列名を取得する具体的な手順を解説します。

1. 主キーを持つサンプルテーブルの作成

まず、「CustomerId」を主キーとしたサンプルテーブル「DemoTable」を作成します。

mysql> CREATE TABLE DemoTable
    (
    CustomerId int NOT NULL AUTO_INCREMENT,
    CustomerName varchar(20),
    CustomerAge int,
    CustomerCountryName varchar(100),
    PRIMARY KEY(CustomerId)
    );
Query OK, 0 rows affected (0.94 sec)

AUTO_INCREMENT を指定することで、CustomerId が自動的に連番で採番され、主キーとして一意性が保証されます。

2. 主キーの列名を取得するクエリ

続いて、INFORMATION_SCHEMA の KEY_COLUMN_USAGE テーブルに対して以下のクエリを実行します。TABLE_NAME で対象テーブルを指定し、CONSTRAINT_NAME = 'PRIMARY' という条件で主キー制約のみに絞り込むのがポイントです。

mysql> SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'DemoTable'
AND CONSTRAINT_NAME = 'PRIMARY';

ポイント

  • TABLE_NAME: 対象となるテーブル名を指定します。必要に応じて TABLE_SCHEMA(データベース名)も条件に追加すると、同じ名前のテーブルが複数のスキーマに存在する場合でも正確に取得できます。
  • CONSTRAINT_NAME = 'PRIMARY': 主キー制約は必ず「PRIMARY」という名前で登録されるため、この条件で主キーだけを抽出できます。

3. 実行結果

上記のクエリを実行すると、以下のように主キーの列名が出力されます。

+-------------+
| COLUMN_NAME |
+-------------+
| CustomerId  |
+-------------+
1 row in set, 2 warnings (0.12 sec)

この結果から、「DemoTable」の主キーが CustomerId 列であることが確認できました。複合主キーの場合は、該当するすべての列が結果として返されます。テーブル構造の調査やマイグレーション作業などで役立つ便利なテクニックなので、ぜひ活用してください。

  1. JavaでResultSetから列名を取得する方法!MySQLを使ったgetMetaData()の実装例を解説

    ResultSetから列名を取得するには?getMetaData()メソッドの基本JavaでJDBCを使ってデータベース操作を行っていると、「検索結果(ResultSet)に含まれる列名(カラム名)を動的に知りたい」という場面によく出会います。そんなときに活躍するのが、getMetaData()メソッドです。このメソッドを呼び出すと、結果セットの構造情報(列の数や名前、型など)を持つResultSetMetaDataオブジェクトを取得できます。プロトタイプ宣言は以下のとおりです。ResultSetMetaData getMetaData() throws SQLException;サンプル用テ

  2. MySQLでカラムが主キー(PRIMARY KEY)かどうかを確認する方法

    MySQLにおいて、特定のカラムが主キー(プライマリキー)であるかどうかを確認したい場合は、information_schema.columnsテーブルのCOLUMN_NAMEとCOLUMN_KEY=PRIを活用します。これにより、テーブル内のどのカラムが主キーとして設定されているのかを簡単に判定できます。基本構文カラムが主キーかどうかを判定するための基本的な構文は以下の通りです。SELECT column_name, CASE WHEN column_key = PRI THEN メッセージ1 ELSE メッセージ2