如何创建插入行后增加列值的触发器?

时间:2012-03-28 03:01:04

标签: mysql sql triggers

我在MySQL中有一个数据库。这是创建它的SQL查询http://paste.org.ru/?xzctqi

这是主表books。我需要做的就是当我添加一些书时,我会为它选择发布者ID。添加书籍后,我需要遍历此表中的所有记录,并为所有行增加列publisher_books_amount,这些行与当前添加的行具有相同的发布者。

+----+-------+--------+------------------------+-----------+
| id | title | author | publisher_books_amount | publisher |
+----+-------+--------+------------------------+-----------+
|  1 | Book1 |      1 |                      0 |         1 |
|  2 | Book2 |      2 |                      0 |         1 |
|  3 | Book3 |      1 |                      0 |         2 |
|  4 | Book4 |      3 |                      0 |         3 |
|  5 | Book1 |      3 |                      0 |         1 |
+----+-------+--------+------------------------+-----------+

我已经创建了触发器

DROP TRIGGER IF EXISTS `insert_trigger`;
DELIMITER |
CREATE TRIGGER `insert_trigger` AFTER INSERT ON books
    FOR EACH ROW 
    BEGIN 
        UPDATE books SET publisher_books_amount = (publisher_books_amount + 1) 
        WHERE publisher = NEW.publisher;
    END;
    |
DELIMITER ;

但是当我试图添加书籍时,MySQL会给我一个错误。

  

无法更新表格'书籍'在存储的函数/触发器中因为它   已经被调用此存储函数/触发器的语句使用。

不要问我为什么要使用非规范化数据库。我只需要上面描述的结构。

BTW我需要在删除和更新行后创建相同的触发器。如果有一些问题,你能帮帮我吗?

此致Dmitriy。

1 个答案:

答案 0 :(得分:1)

不允许在循环内部进行更新,因为它会进入无限循环。 尝试没有更新的triiger,只设置值= this。