外鍵(Foreign Key)建立資料表間的參考完整性約束,確保子表欄位值必須存在於父表對應欄位中。以電腦廠商為例:
parts:零組件供貨清單,含 model 欄位pc:整機產品,含 cpumodel 欄位引用 parts.modelCREATE TABLE parts (
...
model VARCHAR(20) NOT NULL,
...
);
CREATE TABLE pc (
...
cpumodel VARCHAR(20) NOT NULL,
...
);
父表與子表的關聯欄位皆必須有索引:
ALTER TABLE parts ADD INDEX idx_model (model);
ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);
也可在 CREATE TABLE 時直接定義。
ALTER TABLE pc
ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel) REFERENCES parts(model);
fk_cpu_model:約束名稱FOREIGN KEY (cpumodel):子表關聯欄位REFERENCES parts(model):父表被參考欄位當父表資料異動時,自動傳播至子表:
ALTER TABLE pc
ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel) REFERENCES parts(model)
ON UPDATE CASCADE;
父表 model 更新時,子表 cpumodel 自動同步修正。
| 選項 | 行為 |
|---|---|
RESTRICT | 阻止父表異動(預設) |
SET NULL | 子表關聯欄位設為 NULL |
NO ACTION | 同 RESTRICT,標準 SQL 語法 |