MySQL に外部キー制約を追加する具体的な方法

MySQL に外部キー制約を追加する具体的な方法

このチュートリアルの動作環境: Windows 7 システム、MySQL 8 バージョン、Dell G3 コンピュータ。

MySQL 外部キー制約 (FOREIGN KEY) はテーブルの特別なフィールドであり、主キー制約とともによく使用されます。関連付けられているリレーションシップを持つ 2 つのテーブルの場合、関連付けられているフィールドの主キーが配置されているテーブルがプライマリ テーブル (親テーブル) であり、外部キーが配置されているテーブルがセカンダリ テーブル (子テーブル) です。

外部キーは、プライマリ テーブルとセカンダリ テーブル間の関連付けを確立し、2 つのテーブルのデータを接続して、2 つのテーブルのデータの一貫性と整合性を制限するために使用されます。

外部キーを定義するときは、次の規則に従う必要があります。

  • プライマリ テーブルは、データベース内に既に存在しているか、現在作成中のテーブルである必要があります。後者の場合、マスターテーブルとスレーブテーブルは同じテーブルです。このようなテーブルは自己参照テーブルと呼ばれ、この構造は自己参照整合性と呼ばれます。
  • 主テーブルには主キーを定義する必要があります。
  • 主キーには null 値を含めることはできませんが、外部キーには null 値が許可されます。つまり、外部キーの null 以外の値がすべて指定された主キーに表示されている限り、この外部キーの内容は正しいことになります。
  • メイン テーブルのテーブル名の後に列名または列名の組み合わせを指定します。この列または列の組み合わせは、主テーブルの主キーまたは候補キーである必要があります。
  • 外部キーの列数は、主テーブルの主キーの列数と同じである必要があります。
  • 外部キー列のデータ型は、主テーブルの主キー内の対応する列のデータ型と同じである必要があります。

MySQLのテーブルに外部キー制約を追加する

外部キー制約はテーブルを変更するときに追加できますが、外部キー制約を追加するための前提条件は、スレーブ テーブルの外部キー列のデータがマスター テーブルの主キー列のデータと一致しているか、データが存在しないことです。

データ テーブルを変更するときに外部キー制約を追加するための構文は次のとおりです。

ALTER TABLE <テーブル名> ADD CONSTRAINT <外部キー名>
FOREIGN KEY(<列名>) REFERENCES <主テーブル名> (<列名>);

データテーブル tb_emp2 を変更し、フィールド deptId を外部キーとして設定し、データテーブル tb_dept1 の主キー ID に関連付けます。

mysql> テーブル tb_emp2 を変更します
-> 制約 fk_tb_dept1 を追加
-> 外部キー(部門ID)
-> 参照 tb_dept1(id);
クエリは正常、影響を受けた行は 0 行 (1.38 秒)
レコード: 0 重複: 0 警告: 0
mysql> SHOW CREATE TABLE tb_emp2\G
************************** 1. 行 ****************************
テーブル: tb_emp2
テーブルの作成: CREATE TABLE `tb_emp2` (
`id` int(11) NULLではない、
`name` varchar(30) デフォルト NULL,
`deptId` int(11) デフォルト NULL,
`salary` float デフォルト NULL、
主キー (`id`)、
キー `fk_tb_dept1` (`deptId`)、
制約 `fk_tb_dept1` 外部キー (`deptId`) 参照 `tb_dept1` (`id`)
) エンジン=InnoDB デフォルト文字セット=gb2312
セット内1列(0.12秒)

注意: すでに作成されているデータ テーブルに外部キー制約を追加する場合は、外部キー制約が追加される列の値がすべて主キー列からのものであり、外部キー列が空であってはならないことを確認してください。

コンテンツ拡張子:

外部キー制約を使用する場合

正直に言うと、MySQL で InnoDB テーブルを使用する場合、必ずしも外部キー制約を使用する必要はありません。ただし、いくつかのケースでの外部キー制約の機能を説明するために、上記の例のコードを使用して詳しく説明します。これには、ブログ投稿を保存するためのものとコメントを保存するためのものの 2 つの MyISAM テーブルが含まれています。

データベース スキーマを定義するときに、コメント テーブルに外部キーを作成して各行 (コメント) を特定のブログ投稿にマッピングすることにより、これら 2 つのテーブル間に 1 対多の関係を確立します。サンプルの MyISAM テーブルを作成するための基本的な SQL コードは次のとおりです。

`test`.`blogs` が存在する場合はテーブルを削除します。

テーブル `test`.`blogs` を作成します (

`id` INT(10) 符号なしAUTO_INCREMENT、

`title` テキスト、

`content` テキスト、

`author` VARCHAR(45) デフォルト NULL,

PRIROSE キー (`id`)

)ENGINE=MyISAM デフォルト文字セット=utf8;


`test`.`comments` が存在する場合はテーブルを削除します。

テーブル `test`.`comments` を作成します (

`id` INT(10) 符号なしAUTO_INCREMENT、

`blog_id` INT(10) UNSIGNED デフォルト NULL,

`コメント` テキスト、

`author` VARCHAR(45) デフォルト NULL,

PRIROSE キー (`id`)

)ENGINE=MyISAM デフォルト文字セット=utf8;

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

以下もご興味があるかもしれません:
  • MySQL で外部キー制約を作成および削除する方法
  • MySQL データベースの制約とデータ テーブルの設計原則
  • MySQLデータベースで外部キー制約を使用する必要があるかどうかの詳細な説明
  • MySQL 学習: データベース テーブルの 5 つの主要な制約を初心者向けに詳しく説明します
  • MySQL の 6 つの一般的な制約タイプの詳細な説明
  • MYSQLの主キー制約とユニーク制約の違いについて簡単に説明します。
  • MySQL 制約の超詳細な説明
  • MySQL の null 制約のケースの説明
  • MySQLデータベースのテーブルに制約を設定する方法

<<:  インタラクティブな視覚化 JS ライブラリ gojs の使い方の紹介とヒント

>>:  HTMLからPDFへの変換のための純粋なクライアント側と純粋なサーバー側の実装ソリューション

推薦する

Centos8 で NIS ドメイン サービスをセットアップおよび構成するための詳細な手順

目次NIS の紹介ネットワーク環境: 1. 環境の準備(両方のノードが必要) 2.nisマスターサー...

単一の MySQL テーブル内の行数が 500 万を超えてはいけないのはなぜですか?

今日は、興味深いトピックについてお話ししましょう。データベースとテーブルを分割することを検討する前に...

Nginx でアンチホットリンクを設定するための手順を完了する

必要:通常、サイト側は、ウェブサイト上の動画や写真が盗まれるのを防ぎたいと考えています。結局のところ...

HTML でフォーム コントロールを無効にする 2 つの方法: readonly と disabled

Web ページを作成する過程では、フォームがよく使用されます。しかし、フォーム上のコントロールを変更...

Linux は、ディレクトリが存在するかどうかを判断するために if を使用します。

Linux で if を使用してディレクトリが存在するかどうかを判断する方法方法は次のとおりです。...

Dockerイメージ送信コマンドcommitの動作原理と使い方の詳細な説明

ローカルでコンテナを作成した後、このコンテナに基づいてローカル イメージを作成し、このイメージを D...

スクロールバーを非表示にしてコンテンツをスクロールする CSS サンプルコード

序文ページの HTML 構造にネストされたボックスが多数含まれている場合、ページに複数の垂直スクロー...

Vueの監視プロパティの詳細

目次1.watchは一般的なデータ(数値、文字列、ブール値)の変更を監視します。 1. 数値2. 文...

mysql5.7 以降で my.ini を設定するための詳細な手順

Windows 64 ビット版 MySQL 5.7 以降の解凍パッケージにデータディレクトリ、my-...

この記事はPReact10.5.13のソースコードを理解するのに役立ちます

目次render.js 部分create-context.js 部分差分部分Reactのソースコード...

JavaScript におけるシリアル操作と並列操作

目次1. はじめに2. es5メソッド3. 非同期関数のシリアル実行4. 非同期関数の並列実行5. ...

MySQLの一般クエリログとスロークエリログの分析

MySQL のログには、エラー ログ、バイナリ ログ、一般クエリ ログ、スロー クエリ ログなどが含...

Prometheusコンテナのデプロイメントのための実用的なソリューション

環境ホスト名IPアドレス仕えるプロメテウス192.168.237.137プロメテウス、グラファナノー...

Linux で起動時にプログラムを自動的に実行させる最も簡単な方法

たくさん集めましたが、すべて失敗に終わりました。最終的に、この方法は優れており、使用に影響を与えない...

dockerを使用してdubboプロジェクトをデプロイする方法

1. まず、Springbootを使用して簡単なDubboテストプログラムを構築し、関連する依存関係...