我有两张 table 。以下是表格及其字段。
articles
id
title
comments
id
content
article_id
关系是一对多(文章1<--->*评论)
当我删除一篇文章时,我希望文章的所有评论也被删除。
执行此操作的触发器 sql 是什么?
最佳答案
如果您使用的是 InnoDB 引擎,您需要做的就是使用 ON DELETE CASCADE
定义 FK 约束
建议的架构可能如下所示
CREATE TABLE articles
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(256)
);
CREATE TABLE comments
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
content VARCHAR(10),
article_id INT,
FOREIGN KEY (article_id)
REFERENCES articles(id) ON DELETE CASCADE
);
然后当您从 articles
中删除一行时
DELETE FROM articles WHERE id = 1;
comments
中的所有相应行将被自动删除。
这是 SQLFiddle 演示
现在,如果您使用的 MyISAM 引擎没有 FK 的实现,或者您出于某种原因想通过触发器强制执行它,请使用 AFTER DELETE
事件,如下所示
CREATE TRIGGER tg_ad_articles
AFTER DELETE ON articles
FOR EACH ROW
DELETE FROM comments
WHERE article_id = OLD.id;
注意:它是单语句触发器,因此您无需更改 DELIMITER
并使用 BEGIN...END
block 。
这是 SQLFiddle 演示
关于mysql - 如何在 mysql 中执行删除级联?提供的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582196/