2012-03-28 47 views
0

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

可以在存储函数/因为它已经是使用由调用这个存储函数/触发声明 不更新表“书”触发。

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

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

此致德米特里。

回答

1

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