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

MySQL 外鍵級聯操作實戰:ON DELETE CASCADE 與 ON UPDATE CASCADE

     編輯:MySQL 綜合教學

MySQL 外鍵級聯操作實戰:ON DELETE CASCADE 與 ON UPDATE CASCADE

InnoDB 支持外鍵約束與級聯動作。本文以新聞-分類-評論三表為例,演示級聯刪除/更新的完整 DDL 與驗證。

表結構

CREATE DATABASE yynews; USE yynews;

CREATE TABLE categories(
    catId INT AUTO_INCREMENT PRIMARY KEY,
    catName VARCHAR(40) NOT NULL UNIQUE
) CHARSET=utf8;

CREATE TABLE news(
    newsId INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(100) NOT NULL UNIQUE,
    content TEXT NOT NULL,
    createTime TIMESTAMP NOT NULL,
    catId INT
) CHARSET=utf8;

CREATE TABLE comments(
    commId INT AUTO_INCREMENT PRIMARY KEY,
    content TEXT NOT NULL,
    createTime TIMESTAMP NOT NULL,
    newsId INT NOT NULL,
    userIP CHAR(15) NOT NULL
) CHARSET=utf8;

添加外鍵與級聯

ALTER TABLE news 
ADD CONSTRAINT fk_news_cat 
FOREIGN KEY (catId) REFERENCES categories(catId)
ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE comments 
ADD CONSTRAINT fk_comment_news 
FOREIGN KEY (newsId) REFERENCES news(newsId)
ON DELETE CASCADE ON UPDATE CASCADE;

測試數據

INSERT INTO categories(catName) VALUES('娛樂新聞'),('國際新聞');
INSERT INTO news(title,content,createTime,catId) VALUES
('test1','test1',NOW(),1),('test2','test2',NOW(),2),('test3','test3',NOW(),1);
INSERT INTO comments(content,createTime,newsId,userIP) VALUES
('you',NOW(),1,'127.0.0.1'),('you',NOW(),2,'127.0.0.1'),
('you',NOW(),3,'127.0.0.1'),('you',NOW(),1,'127.0.0.1');

驗證級聯刪除

DELETE FROM categories WHERE catId = 1;

結果:分類 1 被刪 → 關聯 news (test1,test3) 刪除 → 關聯 comments (4 條) 全部刪除,僅剩分類 2 及其新聞和評論。

級聯動作選項

選項父表操作子表行為
RESTRICT / NO ACTION刪除/更新阻止,報錯 1451
CASCADE刪除/更新同步刪除/更新關聯行
SET NULL刪除/更新外鍵列置 NULL(需列允許 NULL)
SET DEFAULT刪除/更新外鍵列置默認值(MySQL 暫不支持)

生產環境建議

  • 核心業務**慎用 CASCADE**,誤刪影響面大;改用應用層軟刪除(deleted_at)。
  • 高併發下外鍵鎖爭用大,微服務架構常**移除外鍵**,靠應用層/分布式事務保證一致性。
  • 若必須用,建議 ON UPDATE CASCADE(主鍵極少變),ON DELETE RESTRICT 強制應用層處理刪除邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved