萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 外鍵級聯操作實戰:ON DELETE CASCADE 詳解

建表語句

-- 父表
CREATE TABLE a (
    name CHAR(20) NOT NULL,
    id CHAR(20) NOT NULL PRIMARY KEY
) ENGINE=InnoDB;

-- 子表,定義外鍵並啟用級聯刪除
CREATE TABLE b (
    b_name CHAR(20) NOT NULL,
    b_id CHAR(20) NOT NULL,
    CONSTRAINT fk_b_a FOREIGN KEY (b_id) REFERENCES a(id) ON DELETE CASCADE
) ENGINE=InnoDB;

資料驗證

INSERT INTO a VALUES ('111','1'), ('222','2');
INSERT INTO b VALUES ('1','1');  -- 成功,父表存在 id=1
INSERT INTO b VALUES ('1','3');  -- 失敗,父表無 id=3,外鍵約束攔截

級聯刪除演示

DELETE FROM a WHERE id = '1';
-- 結果:父表 a 刪除 id=1 行,子表 b 中 b_id='1' 的行自動被刪除

其他級聯選項

使用建議

  • 級聯刪除威力大,誤操作可能連鎖刪除大量資料,生產環境建議:
      1. 關鍵業務表不使用 CASCADE,改由應用層控制。
      2. 若使用,務必配合軟刪除(狀態欄位)或備份/延遲刪除機制。
      3. 測試環境充分驗證級聯路徑。
  • 外鍵會增加寫入開銷(鎖檢查),高併發寫入場景可考慮應用層維護參考完整性。
copyright © 萬盛學電腦網 all rights reserved
子句行為
ON DELETE CASCADE刪除父行時,自動刪除子表關聯行
ON DELETE SET NULL刪除父行時,子表外鍵欄位設為 NULL(欄位必須允許 NULL)
ON DELETE RESTRICT有子行存在時禁止刪除父行(預設)
ON DELETE NO ACTION同 RESTRICT,標準 SQL 語法
ON UPDATE CASCADE更新父鍵值時,同步更新子表外鍵值