继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程。

  打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同用户点击商品,那么我们对其数值+1,否则的话,这张点击日志表会过于庞大

  下面我们将prod_clicklog表修改下:

  

  将字段clickdate 修改为 date类型,增加clicknum字段,默认为1.

  然后,我们把上一节课的存储过程sp_load_prod再修改一下:

BEGINSELECT * FROM prod_main WHERE prod_id = _prod_id LIMIT 1;SET @num=FOUND_ROWS();SET @c=0;IF @num=1 THEN #代表商品取出成功SELECT count(*) INTO @c FROM prod_clicklog WHERE prod_id = _prod_id AND user_ip=_user_ip AND user_id=_userid AND clickdate=CURRENT_DATE;if @c>0 THEN #代表已经点击过,只要对clicknum累加1UPDATE prod_clicklog SET clicknum=clicknum+1 WHERE prod_id=_prod_id AND user_ip=_user_ip AND user_id=_userid AND clickdate=CURRENT_DATE;ELSE    #新增点击日志INSERT INTO prod_clicklog(prod_id,user_ip,user_id,clickdate) VALUES (_prod_id,_user_ip,_user_id,CURRENT_DATE);END IF;END IF;
END

  接着我们还是新建查询,call一下 sp_load_prod(1);

  

  prod_clicklog表中的数据:

  

  然后我们多次执行上面的存储过程:

  

  OK,这个思路没有任何问题。

  这时问题来了。那么商品表中的总点击量,什么时候更新呢?  

  1、通过web语言来完成,譬如写个程序定时执行

  2、本课时要讲的是通过mysql的事件来执行.

   我们先执行下面的查询语句: 

SELECT prod_id,sum(clicknum) FROM prod_clicklog GROUP BY prod_id;

 这样就能取出一堆 id,和执行总条数

   

  于是我们写个存储过程count_prod_click,来实现游标,

BEGINDECLARE isend int DEFAULT 0;DECLARE pid int; #代表商品IDDECLARE cnum int; #代表点击量总数DECLARE cur CURSOR FOR SELECT prod_id,sum(clicknum) from prod_clicklog GROUP BY prod_id;DECLARE CONTINUE HANDLER FOR NOT FOUND SET isend =1 ; #游标结束时令isend =1open cur; #打开游标FETCH cur into pid,cnum; #预先定义好的变量,取出第一行,并把内容放入预先定义好的变量while isend !=1 DOUPDATE 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;

  然后刷新主表,可以看到,prod_click_all字段已经被更新

  

  最终使用mysql新建一个事件,令每隔10秒统计一下并更新

  我们先查询下mysql事件是否开启

show VARIABLES like '%event%'

  

  如果没有开启:

SET GLOBAL event_scheduler=ON;

  OK,现在我们新建一个事件 event_count_prodclick:

  

  

  然后我们根据这个延时加载在实战中合理应用。

版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《web级mysql颠覆实战课程 》。如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。

上一课:mysql颠覆实战笔记(四)--商品系统设计(一):商品主表设计

下一课:mysql颠覆实战笔记(六)--商品系统设计(三):商品属性设计之固定属性

转载于:https://www.cnblogs.com/xz1024/p/5738999.html

mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量相关推荐

  1. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<1>python)

    多维数组 形状(Shape): 是一个元组,描述数组的维度,以及各个维度的长度. 长度(Length): 某个维度中的元素个数. 数字 单门课程成绩 1*课程成绩 一维数组 多门课程成绩 n*课程成绩 ...

  2. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(Matplotlib绘图基础<1>python)

    数据可视化 数据分析阶段:理解和洞察数据之间的关系 算法调试阶段:发现问题,优化算法 项目总结阶段:展示项目成果 Matplotlib: 第三方库,可以快速方便地生成高质量的图表 安装Matplotl ...

  3. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<2>python)

    数组元素的切片 一维数组 #一维数组 #切片方法和Python序列数据结构的切片一样 a=np.array([0,1,2,3,4],dtype=np.int64)#占用新的内存 #不包括结束位置 pr ...

  4. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(Matplotlib绘图基础<散点图>python)

    散点图(Scatter): 是数据点在直角坐标系中的分布图 scatter() 函数 marker参数--数据点样式 添加文字--text() 函数 坐标轴设置 增加图例 绘制标准正态分布的散点图步骤 ...

  5. 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<矩阵和随机数>python)

    矩阵和随机数 矩阵 创建矩阵 #创建矩阵 astring = np.mat("1 2 3; 4 5 6") alist = [[1,2,3],[4,5,6]] anplist = ...

  6. Unity实战篇:Buff系统设计(二:具体代码和实战使用)

    首先是Buff种类 public enum BuffKind{FreezeBuff = 1,GodDefendBuff = 2,SteelHeartBuff = 3,} BuffBase public ...

  7. MySQL工作笔记-使用事件和存储过程定时更新某表数据

    目录 基本概念 演示及源码 基本概念 因为要看某展示软件的效果,上午用了Qt实时对表进行更新操作! 这是非常low的表现.其中的一个原因就是效率问题! Qt工作笔记-Qt连接Mysql数据库,检索及修 ...

  8. 这就是搜索引擎--读书笔记五--索引的建立与更新

    索引的建立和更新 索引的建立 前一总结里说到,如果索引结构建立好了,可以提高搜索的速度,那么给定一个文档集合,索引是如何建立起来的呢?建立索引的方式有很多种,在这里我就书中提到的三种方法简单总结一下. ...

  9. 每隔一段时间执行php_用php脚本,你如何定时更新商品列表

    电商项目中为了提高抗并发能力,需要对商品列表做缓存,以下是更新缓存用的脚本: //PRODUCTION_为缓存商品列表的临时key //PRODUCTION为缓存商品列表key $con = mysq ...

最新文章

  1. yolo loss 将图像标注的真实事坐标转换到anchor坐标
  2. 进程间通信(4) 匿名管道
  3. 软件开发中的一些感想
  4. angular基本知识学习笔记 - Component的基本概念
  5. cygwin This indicates that the /etc/passwd (and possibly /etc/group) files should be rebuilt 问题解决办法
  6. mysql测试题汇总_总结:SQL练习【SQL经典练习题】
  7. struts2的通配符和动态方法调用
  8. mysql正则表达式匹配非_MySQL的正则表达式
  9. mysql由浅入深_由浅入深—MySQL数据库
  10. 迷茫中,要让人生更精彩
  11. html取php值,使用PHP从HTML中提取值
  12. 系统分析师教程(张友生)高清pdf下载
  13. 偏见:人工智能辅助决策的隐患
  14. PS去掉图片上的文字
  15. 在线抢购平台_项目预览
  16. 苹果新系统很鸿蒙!iPad终于能写代码了,iPhone竟成异地恋神器 | WWDC 2021
  17. java用zipOutputStream压缩后用WinRAR解压出现“不可预料的压缩文件末端”错误
  18. 多用途手机登录页面模板
  19. 酷比魔方 iwork10 pe重装系统 解决红屏 只需一个u盘
  20. 有道云笔记v6.70去除广告

热门文章

  1. 人机交互大作业_人机交互专业:多领域交叉的高能学科
  2. 学python的正确方法_学习Python最正确的步骤(0基础必备)
  3. shell不允许输入空字符_shell脚本编程之控制脚本
  4. Vue第三部分(2):Vue-CLI构建前后端分离项目以及打包部署
  5. 使用启动外部进程的方式解决there should be only one application object(使用qtwinmigrate中常出现)
  6. Qt文档阅读笔记-Qt Concurrent介绍及简单使用
  7. [Err] 1205 - Lock wait timeout exceeded; try restarting transaction Mysql 报错
  8. guiconsole 操作命令
  9. 四、StringBuffer StringBuilder String 区别
  10. 计组之中央处理器:3、数据通路(单总线结构、专用通路结构)