首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 外鍵完整指南:建立、刪除、級聯動作與檢查控制

     編輯:MySQL 綜合教學

前言

外鍵是關聯式資料庫維護參考完整性的核心機制。許多開發者僅知其用途,卻不清具體動作選項與操作指令。本文系統整理 MySQL 外鍵的建立語法、刪除方式、四種參考動作、額外參數與臨時關閉檢查技巧。

一、建立外鍵

1. CREATE TABLE 階段建立

CREATE TABLE city (
    ...
    country_id INT,
    KEY idx_fk_country_id (country_id),  -- 建議先建立索引
    CONSTRAINT fk_city_country 
        FOREIGN KEY (country_id) 
        REFERENCES country (country_id)
        ON DELETE RESTRICT 
        ON UPDATE CASCADE
        ON DELETE CASCADE
);

重點:

  • KEY idx_fk_country_id (country_id):外鍵欄位建議先加索引,若省略 MySQL 會自動補充。
  • CONSTRAINT fk_city_country:指定外鍵名稱,便於後續管理;若省略 MySQL 會自動產生名稱。
  • ON UPDATE CASCADE:父表主鍵更新時,子表同步更新(級聯更新)。
  • ON DELETE CASCADE:父表記錄刪除時,子表關聯記錄同步刪除(級聯刪除)。
  • ON DELETE RESTRICT:預設行為,子表有關聯資料時禁止刪除父表記錄。

2. ALTER TABLE 事後新增

ALTER TABLE city ADD INDEX idx_city (countryid);
ALTER TABLE city ADD CONSTRAINT fk_city_country 
    FOREIGN KEY (countryid) 
    REFERENCES country (country_id) 
    ON DELETE CASCADE;

注意: 使用 ADD CONSTRAINT 而非 MODIFY。

二、刪除外鍵

ALTER TABLE tbname DROP FOREIGN KEY fk_fkname;

若建立時未指定 CONSTRAINT 名稱,可透過以下指令查詢自動產生的名稱:

SHOW CREATE TABLE tbname;

三、外鍵參考動作詳解

動作類型關鍵字觸發條件子表行為
預設動作RESTRICT / NO ACTION插入子表時父表無對應主鍵禁止插入
RESTRICT / NO ACTION刪除/更新父表時子表有關聯資料禁止刪除/更新
級聯動作CASCADE更新父表主鍵子表同步更新(ON UPDATE CASCADE)
CASCADE刪除父表記錄子表同步刪除(ON DELETE CASCADE)
設定空值SET NULL刪除/更新父表記錄子表對應外鍵欄位設為 NULL(需欄位允許 NULL)

限制: ON DELETE RESTRICT 與 ON DELETE CASCADE 不能同時定義於同一外鍵。

四、臨時關閉外鍵檢查

適用場景:大量資料匯入順序不固定、執行 LOAD DATA 或 ALTER TABLE 時。

SET foreign_key_checks = 0;  -- 關閉檢查
-- 執行匯入、結構變更等操作
SET foreign_key_checks = 1;  -- 重新開啟檢查

五、驗證外鍵定義

SHOW CREATE TABLE city;

輸出中可見完整的 CONSTRAINT、FOREIGN KEY、REFERENCES 及 ON UPDATE/DELETE 子句。

結語

善用外鍵能在資料庫層面強制保障資料一致性,減少應用層防禦性程式碼。掌握建立、刪除、級聯選項與檢查控制,能讓資料模型更健壯、維護更從容。

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