将 prod_log 表中的点击量更新到主表中去。
创建存储过程count__prod__click:
BEGIN
# 游标是否结束的标志
DECLARE isend INT DEFAULT 0;
# 商品id
DECLARE pid INT;
# 点击量总数
DECLARE cnum INT;
# 获取游标
DECLARE cur CURSOR FOR SELECT prod_id, SUM(clicknum) FROM prod_log GROUP BY prod_id;
# 游标结束时令isend = 1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET isend = 1;
# 打开游标
OPEN cur;
# 预先定义好的变量
FETCH cur INTO pid, cnum;
# 循环游标
WHILE isend != 1 DO
# 更新商品主表的总点击量
UPDATE prod_main SET prod_click_all = cnum WHERE prod_id = pid;
# 移动游标
FETCH cur INTO pid, cnum;
END WHILE;
# 关闭游标
CLOSE cur;
END
调用存储过程并且查看变化:
call count_prod_click;
select * from prod_main;
可以发现prod__click__all已经发生变化。
开启事件
SET GLOBAL event_scheduler = ON
SHOW VARIABLES LIKE '%event_%'
新建事件
由于测试,我们设置每10秒执行一次存储过程。
第一步在“计划”中如下图设置:
第二步:到“定义”中将输入我们的sql语句:call count_prod_click
我们回到主表,先将 click__prod__all 字段的值清0
然后不断的刷新等待即可。
实际情况下,我们可以设定在每天晚上几点几分把当天获取到的总数累加到商品表的总点击量中。