首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 外鍵約束完整教學:建立、索引需求、級聯操作與實戰範例

     編輯:MySQL 資料庫相關知識

外鍵核心概念

外鍵(Foreign Key)建立資料表間的參考完整性約束,確保子表欄位值必須存在於父表對應欄位中。以電腦廠商為例:

  • 父表 parts:零組件供貨清單,含 model 欄位
  • 子表 pc:整機產品,含 cpumodel 欄位引用 parts.model

建立外鍵三步驟

步驟 1:建立資料表

CREATE TABLE parts (
    ...
    model VARCHAR(20) NOT NULL,
    ...
);

CREATE TABLE pc (
    ...
    cpumodel VARCHAR(20) NOT NULL,
    ...
);

步驟 2:建立必要索引

父表與子表的關聯欄位皆必須有索引:

ALTER TABLE parts ADD INDEX idx_model (model);
ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);

也可在 CREATE TABLE 時直接定義。

步驟 3:定義外鍵約束

ALTER TABLE pc
ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel) REFERENCES parts(model);
  • 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;

父表 model 更新時,子表 cpumodel 自動同步修正。

其他級聯選項

刪除規則同樣支援

ON DELETE CASCADE | RESTRICT | SET NULL

實務注意事項

  • 外鍵會增加寫入開銷,高併發寫入場景需評估
  • InnoDB 引擎支援外鍵,MyISAM 不支援
  • 大量資料匯入時可暫時停用外鍵檢查:SET FOREIGN_KEY_CHECKS=0;
  • 使用 SHOW CREATE TABLE pc 檢視外鍵定義
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
選項行為
RESTRICT阻止父表異動(預設)
SET NULL子表關聯欄位設為 NULL
NO ACTION同 RESTRICT,標準 SQL 語法