【发布时间】: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 进行非规范化。我只需要上面描述的结构。
顺便说一句,我需要在删除和更新行后创建相同的触发器。如果这有什么问题,你能帮我解决一下吗?
此致,德米特里。
【问题讨论】: