更新另一个表时更新表

时间:2016-04-17 22:30:10

标签: mysql

我有2个表TESTUserInfo和BlockRanking。

TestUserInfo是一组用户信息和特定用户的总计。每个用户还有一个与其用户关联的区域。

在BlockRanking中,我将所有用户与每个区域组合在一起,并将该区域的所有总点数相加。

我有这个查询从TESTUserInfo将值插入表BlockRanking并且它可以工作。

INSERT INTO BlockRanking (zone, total) 
SELECT zone, SUM(total) 
FROM TESTUserInfo 
GROUP BY zone 
ORDER BY SUM(total) DESC

现在我正在尝试做类似这样的事情,但我想更新TESTUserInfo时更新BlockRanking。我特别希望在BlockRanking分区后更新区域和这些区域的总数。

我希望这是一个触发器,所以当更新TESTUserInfo时,BlockRanking也会更新,或者按时间更新。如果这些都不可能,那么查询也会起作用。

1 个答案:

答案 0 :(得分:0)

在表上运行某些查询时,您可以使用triggers来运行任务。每个插入的行都会触发一次触发器。我们可以跟踪在TESTUserInfo表到达时添加到TESTUserInfo表中的总数,而不是聚合。

CREATE TRIGGER update_totals AFTER INSERT ON TESTUserInfo
  FOR EACH ROW
  BEGIN
    INSERT INTO BlockRanking
       (zone, total)
       VALUES 
       (NEW.zone, NEW.total)
    ON DUPLICATE KEY UPDATE
        total = total + VALUES(total);
  END;

请注意,zone必须是BlockRanking中的唯一索引。

如果可以在TESTUserInfo中更新或删除行,则同样必须创建触发器。对于UPDATE触发器,您可以执行以下操作:total = total + NEW.total - OLD.total

另见:

Trigger to update row in another table