【发布时间】:2014-08-03 19:37:08
【问题描述】:
我设计了一个应用程序来分析一个城市不同地方的计数频繁数据。
我有一个数据表(以下简称DT)为每个计数站点设计如下:startDate(DATETIME),dataCount(INT)。
每条记录都包含计数的开始日期和柜台前访问的数量。每条记录的访问数量都清楚。记录间隔取决于计数器(通常是每小时数据)。
我有一张表(以下简称resumeDT)来汇总我所有的计数站点:名称、dateReference、location、description...和dailyAvg。
我想创建一个这种类型的触发器:
CREATE TRIGGER avgDT AFTER UPDATE,INSERT,DELETE ON DT
FOR EACH ROW UPDATE resumeDT SET avg= (SELECT AVG(tmp.sum)
FROM (SELECT sum(count) FROM DT GROUP BY DATE(date)) tmp)
WHERE dateReference="DT"
对我来说有点麻烦的是,如果我一次插入 500 个值,我将另外执行 500 个 UPDATE。我想最后只执行一次更新查询。
我知道FOR EACH ROW 在触发器的语法中是强制性的,但我能找到一种解决方法来做我想做的事吗?
也许使用触发器只是增加一个mysql变量@DTChanged并调用一个每秒扫描@DTChanged的外部脚本。 if (@DTChanged!= 0 and lastDTChanged==@DTChanged)(1s 内没有插入或更新)=> 更新 resumeDT
您有什么建议或其他解决方案吗?
提前感谢您的帮助。
【问题讨论】:
-
不可能,MySQL 没有语句级触发器,只有行级触发器。顺便说一句:
date和count是列的 horrible 名称。一是因为它们是保留字,二是(更重要的是)它们根本不记录存储的内容。 “开始日期”? “结束日期”? “录制日期”? “有效期至日期”? -
感谢您的快速回答。我将我的问题编辑得更明确。
-
这不会改变我的评论。使用 MySQL 中的触发器无法实现此目的。
-
也许是一种解决方法或任何建议可以在不使用触发器的情况下做我想做的事?