mysqlはどのようにプライマリ・キーと外部キーを設定して、カスケードの更新、カスケードの削除を実現します

1566 ワード

プライマリ・キー、外部キー、インデックスの違いは?
 
プライマリキー
外部キー
索引
定義:
レコードを一意に識別します.重複はできません.空白は許可されません.
テーブルの外部キーは別のテーブルのプライマリキーであり、外部キーは重複していてもよいし、空の値であってもよい.
このフィールドには重複値はありませんが、空の値を指定できます.
機能:
データ整合性の確保
他のテーブルと連絡を取るために使用される
クエリーのソート速度の向上
数:
プライマリ・キーは1つしかありません
1つのテーブルに複数の外部キーを付けることができます
1つのテーブルに複数の一意のインデックスを付けることができます
索引の設定
外部キーを設定するには、参照テーブル(pcテーブル)と被参照テーブル(partsテーブル)の両方のフィールドにインデックス(index)を設定する必要があります.
partsテーブル:
ALTER TABLE parts ADD INDEX idx_model (model); partsテーブルにインデックスを追加し、インデックスをmodelフィールドに作成し、このインデックスにidx_という名前を付けます.model.
PCテーブルにも似ています.
ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);
外部キーの定義
次に、2つのテーブルの間に前述したような「制約」を確立します.PCのCPUモデルはpartsテーブルの対応するモデルを参照する必要があるため、PCテーブルのcpumodelフィールドを「外部キー」(FOREIGN KEY)に設定します.つまり、このキーの参照値は他のテーブルから来ます.
ALTER TABLE pc ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel)
REFERENCES parts(model);
カスケード操作
カスケード更新:プライマリ・キーが更新されると、外部キーも更新されます.
外部キーを定義するときに、最後にON UPDATE CASCADEというキーワードを入れることができます.
つまり、メインテーブルが更新されると、サブテーブルに連鎖更新動作が発生し、これを「カスケード」操作と呼ぶ人もいるようです.
この文を完全に書けば、次のようになります.
ALTER TABLE pc ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel)
REFERENCES parts(model)
ON UPDATE CASCADE;
カスケード削除:プライマリ・キーを削除すると、外部キーも削除されます.
ALTER TABLE pc ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel)
REFERENCES parts(model)
ON DELETE CASCADE;
カスケード更新、削除:
 on update cascade on delete cascade

:http://www.phpdadao.com/386.html