初心者のための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プラグインの使用に関する簡単な分析

推薦する

CSS でハニカム/六角形アトラスを実装するためのサンプルコード

理由は分かりませんが、UIではハニカム効果(手を広げたような効果)のデザインが好まれます。 1. 六...

IIS 7.5では、HTMLはSHTMLのようなinclude関数(モジュールマッピングの追加)をサポートします。

最初はたくさんのエラーを見つけましたが、実際には非常に簡単です。shtm の元の設定を参照するだけで...

ウェブデザイナー職の面接でよくある質問と回答

1. ASP.NET Web アプリケーションのテンプレートとは何ですか? それらの違いは何ですか?...

MySQL の時間タイプとモードの詳細

目次1. MySQL の時刻型2. タイムゾーンを確認する3. 不正な時間値4. 厳密モード5. 事...

MySQLデータストレージプロセスパラメータの詳細な例

MySQL ストアド プロシージャ パラメータには、in、out、inout の 3 種類があります...

一般的なCSS3アニメーションの実装方法

1. 何ですかCSS アニメーションは、CSS を使用して拡張マークアップ言語 (XML) 要素をア...

Nginx Rewrite の使用シナリオと設定方法の分析

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

Vue+WebSocket ページでの長時間接続のリアルタイム更新

最近、Vue プロジェクトではデータをリアルタイムで更新する必要があります。折れ線グラフは 1 秒ご...

MySQL データ アーカイブ ツール mysql_archiver の詳細な説明

目次I. 概要2. pt-archiverの主なパラメータ3. mysql_archiverのインス...

Vue バックエンド管理システムのページング機能の実装例

この記事では、主に Vue バックグラウンド管理システムのページング機能の実装を紹介し、次のように共...

MySQL スライディング集計/年初来集計の原理と使用例の分析

この記事では、例を使用して、MySQL スライディング集計/年初来集計の原理と使用方法を説明します。...

JS 日付コントロール My97DatePicker の基本的な使い方

My97DatePicker は非常に柔軟で使いやすい日付コントロールです。使い方はとても簡単です。...

MySQLストレージエンジンについて学びましょう

目次序文1. MySQL メインストレージエンジン: 2. さまざまなストレージエンジンがテーブルを...

HTMLの基礎 HTMLの構造

HTML ファイルとは何ですか? HTML は Hyper Text Markup Language...

CSS で div にスクロールを追加し、スクロール バーを非表示にする

CSS は div にスクロールを追加し、スクロール バーを非表示にします。具体的なコードは次のとお...