MySQL での外部キーの作成、制約、削除

MySQL での外部キーの作成、制約、削除

序文

MySQL バージョン 3.23.44 以降では、InnoDB エンジン タイプのテーブルは外部キー制約をサポートします。

外部キーを使用する条件:

1. 両方のテーブルは InnoDB テーブルである必要があります。MyISAM テーブルは現時点では外部キーをサポートしていません (将来のバージョンではサポートされる可能性があると言われていますが、少なくとも現時点ではサポートされていません)。

2. 外部キー列にはインデックスが必要です。MySQL 4.1.2 以降のバージョンでは、外部キーを作成すると自動的にインデックスが作成されますが、それ以前のバージョンを使用する場合は、明示的にインデックスを作成する必要があります。

3. 外部キー関係にある 2 つのテーブルの列は、同様のデータ型、つまり、int と tinyint のように相互に変換可能な列である必要がありますが、int と char はそうではありません。

外部キーの利点: 2 つのテーブルを関連付け、データの一貫性を確保し、いくつかのカスケード操作を実装できます。

1. 外部キーの作成

構文1: 後続加算方式

alter table テーブル名 制約を追加 制約名 外部キー (現在のテーブルで制約されているフィールド) はメイン テーブル名 (制約されるフィールド名) を参照します。
テーブル student を変更し、制約 fk_class_student を追加し、更新時に外部キー (cls_id)、クラス (cls_id) を追加し、削除時にカスケードを実行し、アクションは実行しません。

構文2: テーブルの作成方法

学生テーブルを作成(
sid int 主キー、
cls_id int が null ではない、
sname varchar(10) が null ではない、
制約 fk_class_student 外部キー (cls_id) は更新時にクラス (cls_id) を参照し、削除時にカスケードを実行します。アクションはありません。
)ENGINE=InnoDB デフォルト文字セット=utf8;

追加ポイント:

SHOW CREATE TABLEクラス

テーブル作成情報を照会できます

ここに画像の説明を挿入

テーブル `class` を作成します (
 `cls_id` int NULLではない、
 `cls_name` varchar(15) NOT NULL,
 主キー (`cls_id`)
) エンジン=InnoDB デフォルト文字セット=utf8

次のデモンストレーションでは、先ほど作成した学生テーブルとクラステーブルを使用します。

内容は以下のとおりです

ここに画像の説明を挿入

ここに画像の説明を挿入

2. 4つの制約方法について

親テーブルで更新/削除操作を実行する場合、子テーブルの操作タイプ

  1. CASCADE サブテーブルは、削除されたキー値への参照を含むすべてのデータを削除します。
  2. SET NULL 親テーブルが削除または更新されると、子テーブルは関連するレコードの外部キーフィールドが配置されている列を NULL に設定します。
  3. RESTRICT 関係のあるフィールドの削除要求を拒否します (これがデフォルトであり、最も安全な設定です)
  4. NO ACTIONはRESTRICTに似ています

先ほど設定した外部キ​​ーを例に挙げます(更新時にカスケード、削除時にアクションなし)

削除しようとすると

cls_id=1 のクラスから削除

結果は以下のとおりです

ここに画像の説明を挿入

外部キー制約に on delete no action が存在するため、メイン テーブルでの削除操作は許可されないことがわかります。しかし、サブテーブルは

cls_id=1 の学生から削除

ここに画像の説明を挿入

親テーブルの関連キーを更新すると、on updateカスケードの存在により正常に更新されます。

cls_id=1 のクラスセット cls_id=4 を更新します

ここに画像の説明を挿入

メインテーブルが更新されると、子テーブルの外部キーフィールドも更新されます。

ここに画像の説明を挿入

3. 外部キーを削除する方法

テーブルサブテーブル名を変更し、外部キーを削除し、外部キー制約名を学生テーブルに変更し、外部キー f​​k_class_student を削除します。

外部キーを削除すると、親テーブルの動作は正常になります。

ここに画像の説明を挿入

要約する

これで、MySQL の外部キーの作成、制約、削除に関するこの記事は終了です。MySQL の外部キーの作成、制約、削除の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の null 制約のケースの説明
  • MySQL 外部キー制約 (FOREIGN KEY) ケースの説明
  • MySQL 外部キー制約とテーブル関係の概要
  • MySQL 整合性制約の定義と例のチュートリアル
  • MySQL 8.0 の新機能 - チェック制約の紹介
  • MySQL のインデックスと制約の例文
  • MySQL 外部キー制約の例の説明
  • MySQL 外部キー制約の詳細な説明
  • MySQL 整合性制約の例の詳細な説明
  • MySQL 制約の超詳細な説明

<<:  HTML テーブル マークアップ チュートリアル (43): テーブル ヘッダーの VALIGN 属性

>>:  Linux で Apache を使用してファイル サーバーを構築する手順

推薦する

Vue プロジェクトはファイルダウンロードの進行状況バー機能を実装します

日常業務でファイルをダウンロードする一般的な方法は 2 つあります。 1 つ目は、サーバーのファイル...

Mysql5.7でのスケジュールバックアップの実装

1. MySQL インストール パス D:\xxx\MYSQL\MySQL Workbench CE...

プロフェッショナルなMySQL開発設計仕様とSQL記述仕様

チーム開発のプロセスでは、プロジェクトの安定性、コードの効率性、管理の利便性のために、内部開発および...

ウェブデザインの概要

<br />1998年に最初の個人ページが誕生してから2008年の今日まで、デザイン業界...

Vue3ルーティングVueRouter4を使用する簡単な例

ルーティングvue-router4 では API の大部分は変更されていないため、変更点のみに焦点を...

ドメイン名を nginx サービスにバインドする方法

nginx.conf で複数のサーバーを設定します。 http リクエストを処理する際、nginx ...

JavaScript関数の詳細な説明これを指す問題

目次1.関数内のこの方向1. 通常の機能2. コンストラクター3. オブジェクトメソッド4. イベン...

DockerにELKをインストールしてJSON形式のログ分析を実装する方法

ELKとは何ですか? ELK は、Elastic が提供するログ収集およびフロントエンド表示ソリュー...

MySql インデックス使用戦略の分析

MySql インデックスインデックスの利点1. 一意のインデックスまたは主キー インデックスを作成す...

Linux チェックアップ、Linux の状態 (ネットワーク IO、ディスク、CPU、メモリ) を把握

目次1. コアコマンド2. 共通コマンド3. コアコマンドの詳細な説明3.1、ps補助3.2 トップ...

MySQL での大規模トランザクションによって発生する挿入の遅延ケースの分析

【質問】 INSERT 文は最も一般的な SQL 文の 1 つです。最近、MySQL サーバーが同時...

vuex で履歴を実装するためのサンプルコード

私は最近、ユーザー操作を元に戻す、またはやり直す機能を備えたビジュアル操作プラットフォームを開発して...

Vue+video.jsはビデオプレイリストを実装します

この記事では、ビデオプレイリストを実装するためのvue + video.jsの具体的なコードを参考ま...

ウェブデザインの発展と西洋建築の類似点は何でしょうか?

歴史は常に驚くほどうまく繰り返される。西洋建築とウェブデザインは、どちらも工学と芸術の組み合わせです...

Linux で Bash 環境変数を設定する方法

Shell は C 言語で書かれたプログラムであり、ユーザーが Linux を使用するための橋渡しと...