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

はじめに: MySQL での外部キーの定義

WBOY
リリース: 2016-06-21 09:01:05
オリジナル
1053 人が閲覧しました
すべてのオープン ソース プロジェクトのリファレンス ドキュメントと同様、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 (サブテーブルの対応するフィールドを空に設定する) などの操作もあります。




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート