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

MySQL 外鍵級聯操作實戰:建立、插入、刪除驗證

     編輯:MySQL 綜合教學

建立父表與子表

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

-- 子表:外鍵關聯 a.id,級聯刪除
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
);

插入資料驗證

INSERT INTO a VALUES ('111', '1'), ('222', '2');

-- 成功:b_id=1 存在於 a.id
INSERT INTO b VALUES ('child1', '1');

-- 失敗:b_id=3 不存在於 a.id,外鍵約束攔截
INSERT INTO b VALUES ('child2', '3');
-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails

級聯刪除驗證

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

其他級聯選項

使用建議

  • 外鍵保證資料完整性,但會增加寫入開銷、鎖競爭
  • 高併發核心業務常在應用層維護完整性,資料庫層不建外鍵
  • 若使用外鍵,**務必建立索引**於子表外鍵欄位(INDEX idx_b_id (b_id)),否則刪除父行需全表掃描子表
  • 級聯刪除可能引發連鎖反應,謹慎評估業務影響
  1. 上一篇文章:
  2. 下一篇文章:
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父表主鍵更新時,子表外鍵同步更新