HOWTO · MySQL

MySQL ドロップ外部キー

この記事では、MySQL の外部キーを削除する方法を紹介します。

このページの内容

外部キーは、2つ以上のテーブルをリンクし、それらの間に意味のあるリンクを形成するキーです。

このキーは、子テーブルの主キーを参照し、親テーブルの外部キーとして機能します。 多くの場合、参照キー制約と呼ばれます。

MySQL で外部キーを削除する

外部キーについて収集された事実は、それが主キーとして機能するため、テーブル内のエントリは 1つだけであり、レコードは主キーに関して一意であるということです。

外部キーは、ユーザーがテーブル間でリンクされたレコードを直接削除することを制限する制約であり、ユーザーの操作を防ぎ、データ セキュリティにつながります。

外部キーが存在するテーブルはテーブルと呼ばれ、キーの元となるテーブルはテーブルと呼ばれます。 テーブルをリンクするという概念は、リレーショナル データベース管理システムにしかありません。

MySQL での外部キー制約の利点は次のとおりです。

  1. 制約により、参照整合性が強制され、テーブル全体で一貫性が保たれます。

  2. ON DELETE CASCADEON UPDATE CONSTRAINTS などの制約を使用すると、データベース全体でテーブルの一貫した動作を維持できます。

  3. 相互リンクされたテーブルの制約を維持すると、テーブルを記憶するオーバーヘッドが減少し、リンクされたテーブルの検出に使用されるため、最終的にパフォーマンスが向上します。

  4. テーブルがすでにリンクされているため、結合を改善し、結果をより速く取得することで、パフォーマンスが向上します。

  5. 外部キーの前に親テーブルのレコードが削除されると、クエリは失敗し、レコードを削除できません。 テーブル間のリンケージを示し、最初に親テーブルではなく子テーブルからレコードを削除するように求めます。

    以下は同じスクリーンショットです。

子テーブルにリンクが存在する場合、親からレコードを削除

外部キーを削除するには、まずテーブルを作成し、テーブルに外部キーを生成する必要があります。 以下は、定義されたテーブルに外部キー制約を作成するコマンドです。

create table student(id varchar(255), name varchar(255), dob date, deptId varchar(255), primary key(id));
create table department(dept_id varchar(255), id varchar(255), dept_name varchar(255), constraint fk_id foreign key(id) references student(id));

まず、上記のクエリは studentdepartment の 2つのテーブルを作成します。 このテーブルは、student テーブルの属性 iddepartment テーブルの外部キー id として機能する親子関係の形式になっています。

添付のスクリーンショット:

主キーで生徒と親のテーブルを作成

外部キーで部門の子テーブルを作成

テーブルにレコードが挿入され、挿入されたレコードを delete ステートメントで操作しようとすると、上記のエラーが表示されます。 移入の問題を修正するには、外部キー制約を削除して削除アクションを実行します。

上記で作成した制約を MySQL で削除する構文は次のとおりです。

Alter table table_name drop constraint constraint_name;

上記のコマンドは、alter コマンドを使用してテーブル スキーマを変更し、drop キーワードを使用してスキーマに適用された制約を削除します。 Alter table は、DDL コマンドとしても知られるデータ定義言語であり、データベースとテーブル スキーマの作成に役立ちます。

Alter table department drop constraint fk_id;

外部キー制約が削除されたときの delete ステートメントのスクリーンショットを以下に示します。

外部キーをドロップし、親テーブルからレコードを削除