我在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。
答案 0 :(得分:1)
不允许在循环内部进行更新,因为它会进入无限循环。 尝试没有更新的triiger,只设置值= this。