我有两张桌子。这是表格及其字段。
articles
id
title
comments
id
content
article_id
这种关系是一对多的(第1条< ---> *评论)
当我删除文章时,我希望删除所有文章的评论。
Trigger sql是做什么的?
答案 0 :(得分:2)
如果您正在使用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 演示
现在,如果您正在使用没有FK实现的MyISAM引擎,或者您出于某种原因希望通过触发器使用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
阻止。
这是 SQLFiddle 演示
答案 1 :(得分:0)
未经测试。 (更改分隔符以添加到db)。
CREATE TRIGGER `article_before_delete`
BEFORE DELETE ON `articles`
FOR EACH ROW
BEGIN
DELETE FROM `comments` where `article_id` = OLD.id;
END