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

MySQLで各制約のフィールドを取得する方法|information_schema.key_column_usageの使い方

複数のテーブルを持つデータベース「business」を例に考えてみましょう。各制約(CONSTRAINT)にどのフィールド(カラム)が含まれているのかを確認したい場合は、information_schema.key_column_usage テーブルを参照するのが便利です。

各制約のフィールドを取得するSQL

以下のクエリを実行すると、「business」スキーマに定義されたすべての制約と、それぞれに関連付けられたカラム情報を一覧で取得できます。

mysql> select *
    -> from information_schema.key_column_usage
    -> where constraint_schema = 'business';

実行結果

クエリを実行すると、次のような結果が返されます(以下の出力は抜粋です。実際には52行が表示されます)。

+--------------------+-------------------+--------------------------+---------------+--------------+------------------------------+--------------+------------------+-------------------------------+-------------------------+-----------------------+------------------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME          | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME                   | COLUMN_NAME  | ORDINAL_POSITION | POSITION_IN_UNIQUE_CONSTRAINT | REFERENCED_TABLE_SCHEMA | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+--------------------+-------------------+--------------------------+---------------+--------------+------------------------------+--------------+------------------+-------------------------------+-------------------------+-----------------------+------------------------+
| def                | business          | PRIMARY                  | def           | business     | primarytable                 | FKPK         | 1                | NULL                          | NULL                    | NULL                  | NULL                   |
| def                | business          | PRIMARY                  | def           | business     | primarytable1                | Fk_pk        | 1                | NULL                          | NULL                    | NULL                  | NULL                   |
| def                | business          | PRIMARY                  | def           | business     | autoincrementtable           | id           | 1                | NULL                          | NULL                    | NULL                  | NULL                   |
| def                | business          | name                     | def           | business     | uniquedemo                   | name         | 1                | NULL                          | NULL                    | NULL                  | NULL                   |
| def                | business          | id                       | def           | business     | uniquedemo1                  | id           | 1                | NULL                          | NULL                    | NULL                  | NULL                   |
| def                | business          | id                       | def           | business     | uniquedemo1                  | name         | 2                | NULL                          | NULL                    | NULL                  | NULL                   |
| def                | business          | constFKPK                | def           | business     | foreigntable                 | Fk_pk        | 1                | 1                             | business                | primarytable1         | fk_pk                  |
| def                | business          | FKConst                  | def           | business     | foreigntabledemo             | FK           | 1                | 1                             | business                | primarytabledemo      | fk                     |
| def                | business          | primarytable1demo_ibfk_1 | def           | business     | primarytable1demo            | ForeignId    | 1                | 1                             | business                | foreigntable1         | studentid              |
+--------------------+-------------------+--------------------------+---------------+--------------+------------------------------+--------------+------------------+-------------------------------+-------------------------+-----------------------+------------------------+
52 rows in set, 2 warnings (0.21 sec)

結果の見方(主なカラムの意味)

  • CONSTRAINT_SCHEMA: 制約が属するデータベース(スキーマ)名
  • CONSTRAINT_NAME: 制約名。「PRIMARY」は主キー制約を表します
  • TABLE_NAME: 制約が設定されているテーブル名
  • COLUMN_NAME: 制約の対象となるカラム名
  • ORDINAL_POSITION: 複合キーの場合におけるカラムの順序(1始まり)
  • POSITION_IN_UNIQUE_CONSTRAINT: 外部キー制約の場合、参照先ユニークキー内での位置
  • REFERENCED_TABLE_NAME/REFERENCED_COLUMN_NAME: 外部キー制約において参照されるテーブル名とカラム名

結果を見ると、主キーや一意キーの制約では参照先の情報がNULLになっている一方、外部キー制約(constFKPK、FKConst、primarytable1demo_ibfk_1など)では、参照元テーブルと参照先テーブル・カラムの対応関係を確認できます。

スキーマ設計やデバッグの際に、データベース内の制約の全体像を把握したいときに、このクエリをぜひ活用してください。

  1. MySQLで選択した行のサイズを取得する方法|CHAR_LENGTH()関数の使い方

    MySQLで選択した行のサイズを取得する方法MySQLで選択した行のサイズ(文字数)を取得するには、CHAR_LENGTH()関数を使用します。この関数は文字列の長さを返すため、SUM()関数と組み合わせることで、複数行にわたる合計サイズを簡単に算出できます。ここでは、実際にテーブルを作成しながら手順を詳しく解説していきます。ステップ1:テーブルを作成するまず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1612    -> (    -> Fi

  2. MySQLでテーブル内のNULLまたはNULL以外のフィールドを一括更新する方法

    はじめにMySQLでは、IS NULL 演算子や IS NOT NULL 演算子を WHERE 句と組み合わせることで、テーブル内の NULL 値または NULL 以外の値が含まれるレコードを条件として、複数のフィールドをまとめて更新できます。本記事では、具体的なサンプルを使ってその手順をわかりやすく解説します。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> );Query OK, 0