初心者のためのMySQL外部キーの設定方法

初心者のためのMySQL外部キーの設定方法

外部キーの役割

データの一貫性、整合性を維持し、外部キー テーブルに格納されているデータを制御することが主な目的です。 2 つのテーブルを関連付けるには、外部キーは外部テーブル内の列の値のみを参照できます。

例えば:

2つのテーブル

表aには顧客番号と顧客名が含まれています

テーブル b には各顧客の注文が格納されます。

外部キーあり

テーブル b に顧客 x の注文がないことを確認した後でのみ、テーブル a から顧客 x を削除できます。

外部キーを確立するための前提条件: このテーブルの列は外部キーと同じタイプである必要があります (外部キーは外部テーブルの主キーである必要があります)。

主キーキーワードを指定します: 外部キー (列名)

外部キーキーワードを参照: <外部キーテーブル名> (外部キー列名) を参照

イベント トリガーの制限: 削除時および更新時に、パラメータ カスケード (外部キーの変更に従う)、制限 (テーブル内の外部キーの変更を制限する)、Null の設定 (NULL 値を設定する)、デフォルトの設定 (デフォルト値を設定する)、[default] アクションなしを設定できます。

例えば:

outTable テーブル主キー ID タイプ int

外部キーを持つテーブルを作成します。

  テーブルtempを作成します(
  id int、
  名前 char(20)、
  外部キー(id)は、削除カスケードおよび更新カスケードでoutTable(id)を参照します。

注: 外部テーブル outTable の id 列を参照するには、id 列を外部キーとして設定します。外部キーの値が削除されると、このテーブル内の対応する列が除外されます。外部キーの値が変更されると、このテーブル内の対応する列の値が変更されます。

mysql 外部キー設定方法

MySQL 外部キー設定方法 / インデックスを作成するときに、親テーブルを削除/更新するときに子テーブルに対して実行する対応する操作を指定できます。

制限、カスケード、null およびアクションなしの設定、デフォルトの設定が含まれます。

  • 制限、アクションなし:
    外部キー制約をすぐに確認してください。子テーブルに一致するレコードがある場合、親テーブルに関連するレコードは削除または更新できません。
  • カスケード:
    親テーブルが削除/更新されると、子テーブル内の対応するレコードもそれに応じて削除/更新されます。
  • null に設定:
    親テーブルが削除/更新されると、子テーブルの対応するフィールドは null に設定されます。このとき、子テーブルの外部キーを null 以外に設定できないことに注意してください。
  • デフォルトを設定:
    親テーブルに削除/更新があった場合、子テーブルは外部キーをデフォルト値に設定しますが、InnoDB はそれを認識できません。実際、MySQL 5.5 以降のデフォルトのストレージ エンジンは InnoDB であるため、この外部キー方式を設定することは推奨されません。環境の MySQL が 5.5 より前で、デフォルトのストレージ エンジンが myisam である場合は、これを検討できます。

set null、setdefault、cascade を選択する場合は、誤った操作によってデータが失われる可能性があるため、注意してください。

上記の説明が十分に明確でない場合は、次の例を参照してください。

国テーブルは親テーブル、country_id は主キー、city は子テーブル、外部キーは country_id で、これは国テーブルの主キー country_id に対応します。

テーブルcountryを作成(
	country_id smallint unsigned not null auto_increment,
	国varchar(50)がnullではない、
	last_update timestamp は null ではありません。デフォルトの current_timestamp は、更新時の current_timestamp です。
	主キー(country_id)
)engine=INNODB デフォルト文字セット=utf8;

テーブル「city」を作成します(
  `city_id` smallint(5) unsigned NOT NULL auto_increment,
  `city` varchar(50) NOT NULL,
  `country_id` smallint(5) 符号なし NOT NULL,
  `last_update` タイムスタンプ NOT NULL デフォルト CURRENT_TIMESTAMP 更新時 CURRENT_TIMESTAMP、
  主キー (`city_id`)、
  キー `idx_fk_country_id` (`country_id`)、
  制約 `fk_city_country` 外部キー (`country_id`) 参照 `country` (`country_id`) 削除制限 ON UPDATE CASCADE
)ENGINE=InnoDB デフォルト文字セット=utf8;

たとえば、上記の 2 つの新しく作成されたテーブルの場合、サブテーブルの外部キーは、on delete restrict ON UPDATE CASCADE mode として指定されます。メイン テーブルがレコードを削除するときに、サブテーブルに対応するレコードがある場合は削除は許可されません。メイン テーブルがレコードを更新するときに、サブテーブルに一致するレコードがある場合は、サブテーブル内の対応するレコードがそれに応じて更新されます。

例えば:

国の値に挿入します(1, 'wq',now());
国から*を選択します。
都市の値に挿入します(222,'tom',1,now());
都市から*を選択します。

country_id=1 の国から削除します。
国を更新します。country_id=1 の場合、country_id=100 を設定します。
country='wq' の country から * を選択します。
city='tom' の場合、city から * を選択します。

要約する

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

以下もご興味があるかもしれません:
  • MySQL 外部キー設定方法の例
  • 主キー、外部キー、複合主キーを作成するための MySQL ステートメント
  • MySQL 外部キーの使用法の詳細な説明
  • MySQL 外部キーの使用法と詳細な説明
  • mysql 外部キーを作成する
  • MySQL の主キーと外部キーを理解するための簡単なチュートリアル
  • MySQL 外部キー削除問題の概要
  • MySQL の外部キー制約の詳細な説明

<<:  ウェブサイトのフロントエンドパフォーマンスの最適化: JavaScript と CSS

>>:  HTML webpackプラグインの使用に関する簡単な分析

推薦する

MySQL 文字セットの概要

目次文字セット比較ルール4つのレベルの文字セットと比較規則3つのシステム変数このノートは主にMySQ...

MySql のサブクエリ内のクエリ例の詳細な説明

北西を見ると私の故郷はどこにあるでしょうか。南東の満月を何度見たことがあるでしょうか。月が再びゆっく...

Vue SPA ファースト スクリーン最適化ソリューション

目次序文最適化ソ連オンデマンドインポート1. ルーティングファイルでコンポーネントをオンデマンドでイ...

Vueストレージにはブール値のソリューションが含まれています

Vueはブール値でストレージを保存します今日、問題に遭遇しました。バックグラウンドから返された真偽の...

熟練デザイナーの7つの原則(2):色の使い方

<br />前回の記事:優秀なデザイナーの7つの原則(1):フォントデザイン 英語 原文...

Vueはスクロールバースタイルを実装します

最初はブラウザのスクロールバーのスタイルを変更して効果を実現したいと思っていましたが、情報を調べてみ...

jQueryはスライディングタブを実装する

この記事では、スライドタブを実装するためのjQueryの具体的なコードを参考までに紹介します。具体的...

JavaScript における async と await の使い方とメソッド

JS の async 関数と await キーワード 関数ヘルワールド() { 「こんにちは!美しい...

複数の画像を切り替えるJavaScript

この記事では、複数の画像を切り替えるJavaScriptの具体的なコードを参考までに紹介します。具体...

Windows 7 64 ビットに最新バージョンの MySQL サーバーをインストールする方法のグラフィック チュートリアル

最近、MySQL データベースを勉強していて、設定ファイルを頻繁に変更したため、MySQL データベ...

MySQL シリーズ 8 MySQL サーバー変数

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

MySQLテーブルにタイムスタンプを追加するいくつかの方法

シナリオ:テーブル内のデータは、同期ツールを使用して他のデータベースと同期する必要があり、増分同期に...

Nginx の負荷分散アルゴリズムとフェイルオーバー分析

概要Nginx ロード バランシングは、アップストリーム サーバー (実際のビジネス ロジックによっ...

UCenter ホームサイトに統計コードを追加

UCenter Homeは、ComsenzがリリースしたSNSサイト構築システムです。最新バージョン...