如何在mysql中执行删除级联?示例提供

时间:2013-09-02 23:52:44

标签: mysql sql triggers

我有两张桌子。这是表格及其字段。

articles
   id
   title
comments
   id
   content
   article_id

这种关系是一对多的(第1条< ---> *评论)

当我删除文章时,我希望删除所有文章的评论。

Trigger sql是做什么的?

2 个答案:

答案 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 

这里回答类似的问题 I want a trigger to DELETE from 2 tables in MySQL