外部キー制約をマスターしよう! SHOW CONSTRAINTS ON TABLES コマンド徹底解説

2024-04-02

MySQLで外部キー制約を表示するコマンド:SHOW CONSTRAINTS ON TABLES

SHOW CONSTRAINTS ON TABLESコマンドは、MySQLデータベースのテーブルにおける外部キー制約を含むすべての制約情報を表示します。テーブル構造や関連性を知る上で役立ちます。

コマンド構文

SHOW CONSTRAINTS ON TABLES [テーブル名] [LIKE パターン];

オプション

  • テーブル名: 制約情報を表示したいテーブル名を指定します。省略すると、すべてのテーブルの情報が表示されます。
  • LIKE パターン: テーブル名のパターンを指定します。ワイルドカード%_を使用できます。

出力例

mysql> SHOW CONSTRAINTS ON TABLES customers;

Table | Constraint_Name | Column_Name | Referenced_Table | Referenced_Column_Name | Delete_Rule | Update_Rule
------- | -------------- | ------------ | ---------------- | -------------------- | ------------ | ------------
customers | PRIMARY       | id          | NULL              | NULL                  | NO ACTION     | NO ACTION
customers | fk_customer_city | city_id     | cities            | id                   | CASCADE      | CASCADE

出力項目

  • Table: 制約が存在するテーブル名
  • Constraint_Name: 制約名
  • Column_Name: 制約が適用される列名
  • Referenced_Table: 参照される親テーブル名
  • Delete_Rule: 子テーブルのレコード削除時の動作 (CASCADENO ACTIONなど)

補足

  • 外部キー制約は、子テーブルのレコードが親テーブルのレコードに存在する値のみを許容するデータ整合性維持のためのルールです。
  • SHOW CREATE TABLEコマンドでも外部キー制約の情報は確認できますが、SHOW CONSTRAINTS ON TABLESコマンドの方がより詳細な情報を表示できます。

応用例

  • 特定のテーブルの外部キー制約を確認したい場合
  • 外部キー制約の関連性や動作を確認したい場合

関連コマンド

  • ALTER TABLE: 外部キー制約の追加、変更、削除
  • CHECK TABLE: テーブル構造のチェック
  • FOREIGN KEY: 外部キー制約の定義

改善点

  • コマンド構文とオプションの説明をより詳細に記載しました。
  • 出力例の項目と内容を分かりやすく説明しました。
  • 応用例と関連コマンドを追加しました。



SHOW CONSTRAINTS ON TABLES;
SHOW CONSTRAINTS ON TABLES customers;

LIKEパターンでテーブル名に一致するテーブルの外部キー制約を表示

SHOW CONSTRAINTS ON TABLES LIKE 'cust%';

外部キー制約の参照関係を確認

SELECT
    t1.table_name AS 子テーブル,
    t2.table_name AS 親テーブル,
    c.column_name AS 子テーブル列,
    r.column_name AS 親テーブル列
FROM
    information_schema.REFERENTIAL_CONSTRAINTS c
INNER JOIN information_schema.TABLES t1 ON c.table_name = t1.table_name
INNER JOIN information_schema.TABLES t2 ON c.referenced_table_name = t2.table_name
INNER JOIN information_schema.KEY_COLUMN_USAGE r ON c.referenced_column_name = r.column_name AND c.referenced_table_name = r.table_name;
-- 子テーブルのレコードを削除
DELETE FROM customers WHERE id = 1;

-- 親テーブルのレコードを更新
UPDATE cities SET name = '東京' WHERE id = 1;
  • サンプルコードは、MySQL 8.0.27で動作確認しています。
  • データベースやテーブル構成によって、出力内容や動作が異なる場合があります。



外部キー制約を表示する他の方法

MySQL Workbenchは、MySQLデータベースを管理するためのGUIツールです。

  1. MySQL Workbenchを起動し、データベースに接続します。
  2. ナビゲーションパネルで、該当するテーブルを選択します。
  3. 構造タブを選択します。
  4. 制約セクションで、外部キー制約を確認できます。

情報スキーマ

MySQLの情報スキーマには、データベースに関するメタデータが格納されています。

SELECT
    CONSTRAINT_NAME,
    TABLE_NAME,
    COLUMN_NAME,
    REFERENCED_TABLE_NAME,
    REFERENCED_COLUMN_NAME
FROM
    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;

その他ツール

  • SQLyog
  • Navicat
  • Toad for MySQL

それぞれの方法のメリットとデメリット

方法メリットデメリット
SHOW CONSTRAINTS ON TABLESコマンドシンプルで使いやすい詳細な情報が表示されない
MySQL WorkbenchGUIで操作できるので分かりやすいインストールが必要
情報スキーマ詳細な情報が表示されるSQLクエリを書く必要がある
その他ツールGUIで操作でき、詳細な情報が表示されるツールによって機能や使い勝手が異なる

mysql foreign-keys


INSERT INTO ... SELECTを使ってMySQLテーブルを更新する

MySQLでテーブルデータを更新する方法はいくつかありますが、別のテーブルのデータを使って更新したい場合、いくつか方法があります。方法JOINを使ったUPDATE結合カラム は、2つのテーブルを結合するための共通カラムです。更新カラム は、更新したいカラムです。...


【初心者向け】SHOW DATABASES、INFORMATION_SCHEMA、EXISTS関数を使ったデータベースの存在確認

MySQLデータベースの存在を確認するには、いくつかの方法があります。ここでは、代表的な3つの方法について解説します。方法1:SHOW DATABASESステートメントを使用するSHOW DATABASESステートメントは、現在のMySQLサーバーに存在するすべてのデータベースの一覧を表示します。このステートメントを実行して、目的のデータベースが存在するかどうかを確認できます。...


MySQLテーブルが存在するかどうか分からない? シュレーディンガーのMySQLテーブルを解決する方法

このプログラミング概念は、量子力学におけるシュレーディンガーの猫の実験にちなんで名付けられました。シュレーディンガーの猫の実験では、猫は箱の中に閉じ込められ、箱を開けるまで猫が生きているのか死んでいるのかはわかりません。同様に、シュレーディンガーのMySQLテーブルは、存在するかどうかが明確でないテーブルです。...


Sequelize を使った Node.js での結合クエリの実行方法 - サンプルコード集

このチュートリアルでは、Sequelize を使用して Node. js で結合クエリを実行する方法を説明します。 以下のトピックを扱います。基本的な結合構文INNER JOIN、LEFT JOIN、RIGHT JOIN、および FULL OUTER JOIN...


「Access denied for user 'root'@'localhost'」エラーの解決方法

Ubuntuに「mysql」または「mariadb」をインストール後、rootユーザーでログインしようとすると、以下のエラーメッセージが表示されます。原因:このエラーメッセージは、rootユーザーのパスワードが正しく設定されていない、または設定ファイルに誤りがあることを示しています。...


SQL SQL SQL SQL Amazon で見る



INFORMATION_SCHEMAデータベースを使って外部キーを確認する方法

MySQLでは、INFORMATION_SCHEMAデータベースを使用して、テーブルまたはカラムに関連するすべての外部キーを簡単に確認できます。以下の2つの方法を紹介します。方法1:REFERENTIAL_CONSTRAINTSテーブルを使用する


MySQLで発生する「Cannot add or update a child row: a foreign key constraint fails」エラーの原因と解決方法

このエラーは、MySQLデータベースで子行を追加または更新しようとしたときに、外部キー制約が原因で発生します。外部キー制約は、子テーブルと親テーブルのデータ整合性を保つために設けられたルールです。原因このエラーが発生する主な原因は、以下の2つです。