【问题标题】:How to create trigger which increment colum value after inserting the row?如何在插入行后创建增加列值的触发器?
【发布时间】:2012-03-28 03:01:03
【问题描述】:

我在 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 向我提供了一个错误。

无法更新存储函数/触发器中的表“books”,因为它是 已被调用此存储函数/触发器的语句使用。

不要问我为什么要对 DB 进行非规范化。我只需要上面描述的结构。

顺便说一句,我需要在删除和更新行后创建相同的触发器。如果这有什么问题,你能帮我解决一下吗?

此致,德米特里。

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

    不允许在循环内更新,因为它会进入无限循环。 在不更新的情况下尝试您的 triiger,仅设置值 this=this。

    【讨论】:

      猜你喜欢
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多