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

MySQLデータベースから制約の一覧を取得する方法

MySQLデータベースに登録された制約(CONSTRAINT)の一覧を確認したい場面は少なくありません。テーブル設計の見直しや、主キー・外部キーの管理を行う際などに役立ちます。そのような場合には、information_schemaデータベースのtable_constraintsテーブルを参照することで、簡単に制約の一覧を取得できます。

制約の一覧を取得する基本構文

select * from information_schema.table_constraints where constraint_schema = 'yourDatabaseName';

constraint_schemaに対象となるデータベース名を指定することで、そのデータベースに含まれるすべてのテーブルの制約情報を一度に取得できます。

実行例:データベース「business」の制約を取得する

ここでは、サンプルデータベース「business」からすべてのテーブルの制約情報を取得してみましょう。以下のクエリを実行します。

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

実行結果

上記のクエリを実行すると、「business」データベースに存在するすべてのテーブルの制約が一覧形式で表示されます。実際の結果は48行返されますが、ここでは読みやすさのため一部を抜粋して掲載します。

+--------------------+-------------------+--------------------------+--------------+------------------------------+-----------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME          | TABLE_SCHEMA | TABLE_NAME                   | CONSTRAINT_TYPE |
+--------------------+-------------------+--------------------------+--------------+------------------------------+-----------------+
| def                | business          | PRIMARY                  | business     | primarytable                 | PRIMARY KEY     |
| def                | business          | PRIMARY                  | business     | primarytable1                | PRIMARY KEY     |
| def                | business          | PRIMARY                  | business     | autoincrementtable           | PRIMARY KEY     |
| def                | business          | PRIMARY                  | business     | demoauto                     | PRIMARY KEY     |
| def                | business          | UserId                   | business     | usernameandpassworddemo      | UNIQUE          |
| def                | business          | name                     | business     | uniquedemo                   | UNIQUE          |
| def                | business          | id                       | business     | uniquedemo1                  | UNIQUE          |
| def                | business          | constFKPK                | business     | foreigntable                 | FOREIGN KEY     |
| def                | business          | FKConst                  | business     | foreigntabledemo             | FOREIGN KEY     |
| def                | business          | ConstChild               | business     | childdemo                    | FOREIGN KEY     |
+--------------------+-------------------+--------------------------+--------------+------------------------------+-----------------+
48 rows in set, 2 warnings (0.24 sec)

主なカラムの意味

  • CONSTRAINT_CATALOG:制約が属するカタログ名(通常は「def」)
  • CONSTRAINT_SCHEMA:制約が定義されているデータベース名
  • CONSTRAINT_NAME:制約の名前(主キーの場合は「PRIMARY」と表示される)
  • TABLE_SCHEMA:テーブルが属するデータベース名
  • TABLE_NAME:制約が設定されているテーブル名
  • CONSTRAINT_TYPE:制約の種類(PRIMARY KEY/UNIQUE/FOREIGN KEYなど)

制約の種類について

出力結果からは、主に以下の3種類の制約を確認できます。

  • PRIMARY KEY:テーブル内の各行を一意に識別するための主キー制約
  • UNIQUE:指定したカラムに重複した値が登録されるのを防ぐ一意制約
  • FOREIGN KEY:他のテーブルとの参照整合性を維持するための外部キー制約

特定の制約だけを絞り込む方法

たとえば外部キー制約だけを確認したい場合は、WHERE句にCONSTRAINT_TYPEの条件を追加します。

mysql> select *
    -> from information_schema.table_constraints
    -> where constraint_schema = 'business'
    -> and constraint_type = 'FOREIGN KEY';

このようにinformation_schema.table_constraintsを活用すれば、データベース全体の制約状況をひと目で把握でき、スキーマの保守作業やトラブルシューティングを効率化できます。

  1. MySQL Workbenchを使ってサーバー上のデータベースからERモデルを取得する方法

    サーバー上のデータベースからERモデル(ER図)を取得するには、まずMySQL Workbenchを起動します。起動直後の画面は以下のとおりです。1. リバースエンジニアリングの開始次に、メニューバーから「Database」メニューを選択し、「Reverse Engineer」をクリックします。Database -> Reverse Engineer2. データベースへの接続すると、下のスクリーンショットのようなウィザードが表示されます。ここでデータベースのパスワードを入力し、「OK」ボタンを2回押してください。3. ウィザードの進行「OK」ボタンを押すと、次のウィザード画面に移行します

  2. JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法

    MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI