検索
ホームページphp教程php手册はじめに: MySQL での外部キーの定義

すべてのオープン ソース プロジェクトのリファレンス ドキュメントと同様、MySQL ドキュメント内の SQL 構文の説明は、私のような初心者にとってはわかりにくいものになっています。いいえ、今日は MySQL で外部キーを設定するための構文を理解するのに 1 日のほとんどを費やしたので、第一に印象を深めるため、第二に、2 日以内に忘れても戻ってくることができるように、すぐに書き留めました。簡単にチェックしてみてください。

データ テーブルの定義

コンピュータ メーカーが、完全なマシンと付属品に関する製品情報をデータベースに持っていると仮定します。完成機の製品情報を保存するテーブルをpcと呼び、付属品の供給情報を保存するテーブルを部品と呼びます。

pc テーブルには、このコンピュータで使用される CPU モデルを記述するために使用されるフィールドがあります。

部品テーブルには、CPU モデルを記述する対応するフィールドがあります。これはすべての CPU モデルのリストであると考えられます。

当然のことですが、このメーカーのパソコンに使用されているCPUは、供給情報表(部品)に存在するモデルでなければなりません。このとき、2 つのテーブルの間には制約関係があり、pc テーブルの CPU モデルは部品テーブルのモデルによって制約されます。

まずパーツ テーブルを作成します。

CREATE TABLE Parts (
... フィールド定義...,
モデル VARCHAR(20) NOT NULL,
. .. フィールド定義...
);

次は PC テーブルです:

CREATE TABLE pc (
... フィールド定義...,
cpumodel VARCHAR(20) NOT NULL,
...フィールド定義...
};

インデックスを設定

外部キーを設定するには、参照テーブル (PC テーブル) と参照テーブル (部品テーブル) では、対応する 2 つのフィールドにインデックスが設定されている必要があります

部品テーブルの場合:
ALTER TABLE Parts ADD INDEX idx_model ( model);
この文は、パーツ テーブルにインデックスを追加することを意味します。インデックスはモデル フィールドに構築され、インデックスの名前は idx_model です。
PC テーブルの場合も同様です:

ALTER。 TABLE pc ADD INDEX idx_cpumodel (cpumodel);

実際には、これら 2 つのインデックスはテーブルの作成時に設定できます。これは、


の必要性を定義するためのものです。 key
PC の CPU モデルは部品テーブル内の対応するモデルを参照する必要があるため、2 つのテーブル間に次の「制約」が確立されます。そのため、PC テーブルの cpumodel フィールドを設定します。つまり、このキーの参照値は他のテーブルから取得されます

ALTER TABLE pc ADD CONSTRAINT fk_cpu_model <.> FOREIGN KEY (cpumodel)
REFERENCES Parts( model);

最初の行は、pc テーブルの外部キーを設定し、この外部キーに fk_cpu_model という名前を付けます。2 行目は、このテーブルの cpumodel フィールドを外部キーとして設定します。 3 行目は、この外部キーの制約がパーツ テーブルのモデル フィールドからのものであることを示しています。このようにして、PC を作成するときに使用される CPU モデルがパーツ テーブルに存在しません。その後、MySQL はこの PC の作成を禁止します。


カスケード操作


すべてがうまくいきましたね。
次の状況を考えてみましょう:
技術者は、1 か月前に部品表に入力された特定のシリーズの CPU のモデル (モデルは多数ある可能性があります) がすべて間違った文字を入力していることを発見しました。 、今度は修正する必要があります。私たちが望んでいるのは、部品テーブルの参照列が変更されたときに、対応するテーブルの参照列も自動的に修正されることです。

外部キーを定義するときにこのキーワードを最後に追加できます:

ON UPDATE CASCADE; つまり、メイン テーブルが更新されると、サブテーブルがチェーン更新アクション。これを「カスケード」操作と呼ぶ人もいるようです。 :)

このステートメントを完全に記述すると、次のようになります:

ALTER TABLE pc ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel)
REFERENCES Parts(model)
ON UPDATE CASCADE;

CASCADE に加えて、RESTRICT (メイン テーブルへの変更を禁止する)、SET NULL (サブテーブルの対応するフィールドを空に設定する) などの操作もあります。




声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。