我该如何创建此触发器?

时间:2016-05-29 13:54:57

标签: mysql triggers

我有两个看起来像这样的表(当然他们有更多的行)。

AuthorID | Name          | Number of albums
-------------------------------------------
1        | Santana       | 39
2        | Johnny Cash   | 95

AuthorID | AlbumID     
----------------------
1        | 14    
2        | 17

我想要做的是有一个trigget,当删除行或插入第二个表时会更新。我想在第一个表中更新的行是第3行。这基本上代表count(AlbumID),这也是我计算它的方式。我真的不知道我会怎么做,因为直到现在我才创造了非常简单的触发器

1 个答案:

答案 0 :(得分:0)

根本不清楚为什么你需要首先存储number_of_albums列。但我不会解决这个问题。我会回答你提出的问题。

第二个表上的插入后触发器可以执行第一个表的更新,以增加给定author_id的number_of_albums列。我们假设第一个表的名称是author,第二个表的名称是album

 DELIMITER $$

 CREATE TRIGGER album_ai 
 AFTER INSERT ON album 
 FOR EACH ROW
 BEGIN 
   UPDATE author 
      SET number_of_albums = number_of_albums + 1
    WHERE author_id = NEW.author_id;
 END$$    

 DELIMITER ;

您可以使用after delete触发器执行类似操作,递减number_of_albums列,引用OLD.author_id以获取已删除行的author_id列的值。

对于更新,如果更改author_id列的值,则需要更新两行...在一行上增加number_of_albums,并在另一行中减少number_of_albums。

 DELIMITER $$

 CREATE TRIGGER album_ai 
 AFTER UPDATE ON album 
 FOR EACH ROW
 BEGIN
   IF NOT ( NEW.author_id <=> OLD.author_id ) THEN  
     UPDATE author
        SET number_of_albums = number_of_albums - 1
      WHERE author_id = OLD.author_id;
     UPDATE author
        SET number_of_albums = number_of_albums + 1
      WHERE author_id = NEW.author_id;
   END IF;
 END$$    

 DELIMITER ;