はじめに: MySQL での外部キーの定義
リリース: 2016-06-21 09:01:05
すべてのオープン ソース プロジェクトのリファレンス ドキュメントと同様、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 までご連絡ください。
著者別の最新記事
-
2024-10-22 09:46:29
-
2024-10-13 13:53:41
-
2024-10-12 12:15:51
-
2024-10-11 22:47:31
-
2024-10-11 19:36:51
-
2024-10-11 15:50:41
-
2024-10-11 15:07:41
-
2024-10-11 14:21:21
-
2024-10-11 12:59:11
-
2024-10-11 12:17:31