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

MySQL 外鍵入門:如何定義外鍵約束

     編輯:MySQL 資料庫相關知識

定義資料表

假設某電腦製造商,資料庫保存整機與配件產品資訊。整機資訊表稱 Pc;配件供貨資訊表稱 Parts。

  • Pc 表有欄位描述電腦使用的 CPU 型號。
  • Parts 表有對應欄位描述 CPU 型號,可視為所有 CPU 型號清單。

顯然,廠商生產的電腦其 CPU 型號一定存在 Parts 表中。兩表間存在約束關係——Pc 表的 CPU 型號受 Parts 表型號約束。

建立資料表

CREATE TABLE parts (
    ... 欄位定義 ...,
    model VARCHAR(20) NOT NULL,
    ... 欄位定義 ...
);

CREATE TABLE pc (
    ... 欄位定義 ...,
    cpumodel VARCHAR(20) NOT NULL,
    ... 欄位定義 ...
);

建立索引

若要設定外鍵,參照表(pc)與被參照表(parts)中對應的兩個欄位必須都建立索引。

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

這兩索引也可在建表時直接建立,此處分開僅為強調必要性。

定義外鍵

建立兩表間「約束」:pc 的 CPU 型號必須參照 parts 表對應型號,故將 pc.cpumodel 設為「外鍵」。

ALTER TABLE pc ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel)
REFERENCES parts(model);
  • 第一行:為 pc 表設外鍵,命名為 fk_cpu_model。
  • 第二行:將本表 cpumodel 設為外鍵。
  • 第三行:此外鍵受約束於 parts 表的 model 欄位。

完成後,若嘗試建立一台 Pc 其 CPU 型號不存在於 Parts 表,MySQL 會禁止建立。

級聯操作

考慮情況:技術人員發現一個月前輸入 parts 表某系列 CPU 型號(可能有多款)全輸錯一字母,需修正。希望 parts 表被參照欄位變更時,pc 表參照欄位自動更正。

在定義外鍵時加入關鍵字:

ON UPDATE CASCADE;

完整語句:

ALTER TABLE pc ADD CONSTRAINT fk_cpu_model
FOREIGN KEY (cpumodel)
REFERENCES parts(model)
ON UPDATE CASCADE;

除 CASCADE 外,還有 RESTRICT(禁止主表變更)、SET NULL(子表對應欄位設為 NULL)等操作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved