【发布时间】:2020-11-22 05:32:12
【问题描述】:
这似乎是一个基本问题,但我似乎无法弄清楚
我有 2 张桌子:table_a 和 table_b
SELECT * FROM `table_a`
+----+--------+----------+
| id | a_item | a_values |
+----+--------+----------+
| 1 | 1 | 5 |
| 2 | 1 | 5 |
+----+--------+----------+
SELECT * FROM `table_b`;
+--------+-------+
| a_item | total |
+--------+-------+
| 1 | 10 |
+--------+-------+
# NOTE: total is TEN
正如它所显示的,我正在使用来自 table_a 的 SUM(a_values) 触发器,并将结果存储在 table_b 中。
我使用的触发器是:
CREATE TRIGGER totaling
AFTER INSERT ON table_a
FOR EACH ROW
BEGIN
INSERT INTO table_b(a_item, total)
SELECT a_item, SUM(a_values) FROM table_a
GROUP by a_item
ON DUPLICATE KEY UPDATE
total = VALUES(total);
END
现在可以说,我更新table_b:
UPDATE table_b
SET total = total - 5
WHERE a_item = 1
# NOTE: I'm subtracting FIVE from previous total which was TEN
table_b 总列的结果是 5,这是预期的
SELECT * FROM `table_b`
+--------+-------+
| a_item | total |
+--------+-------+
| 1 | 5 |
+--------+-------+
到目前为止,一切正常
但是,当我在table_a 上进行插入时,计算就会消失。
示例:
INSERT INTO table_a(a_item, a_values)
VALUES
(1, 5);
SELECT * FROM `table_b`;
+--------+-------+
| a_item | total |
+--------+-------+
| 1 | 15 |
+--------+-------+
# NOTE: see how the total has changed from FIVE to FIFTEEN, my expected result is TEN
我可以通过直接更新table_a 来解决这个问题,然后插入触发器只会与它的现有值求和,这将给我预期的结果。
问题是,有没有一种方法可以在不操纵table_a 并且只操纵table_b 的情况下获得所需的结果,还是我需要更改插入触发器?
谢谢。
【问题讨论】:
-
为什么要直接更新table_b?
-
我希望 table_a 中的数据保持不变,
标签: mysql sql database mariadb database-trigger