mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量
继续回到沈老师的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颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量相关推荐
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<1>python)
多维数组 形状(Shape): 是一个元组,描述数组的维度,以及各个维度的长度. 长度(Length): 某个维度中的元素个数. 数字 单门课程成绩 1*课程成绩 一维数组 多门课程成绩 n*课程成绩 ...
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(Matplotlib绘图基础<1>python)
数据可视化 数据分析阶段:理解和洞察数据之间的关系 算法调试阶段:发现问题,优化算法 项目总结阶段:展示项目成果 Matplotlib: 第三方库,可以快速方便地生成高质量的图表 安装Matplotl ...
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<2>python)
数组元素的切片 一维数组 #一维数组 #切片方法和Python序列数据结构的切片一样 a=np.array([0,1,2,3,4],dtype=np.int64)#占用新的内存 #不包括结束位置 pr ...
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(Matplotlib绘图基础<散点图>python)
散点图(Scatter): 是数据点在直角坐标系中的分布图 scatter() 函数 marker参数--数据点样式 添加文字--text() 函数 坐标轴设置 增加图例 绘制标准正态分布的散点图步骤 ...
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(NumPy科学计算库<矩阵和随机数>python)
矩阵和随机数 矩阵 创建矩阵 #创建矩阵 astring = np.mat("1 2 3; 4 5 6") alist = [[1,2,3],[4,5,6]] anplist = ...
- Unity实战篇:Buff系统设计(二:具体代码和实战使用)
首先是Buff种类 public enum BuffKind{FreezeBuff = 1,GodDefendBuff = 2,SteelHeartBuff = 3,} BuffBase public ...
- MySQL工作笔记-使用事件和存储过程定时更新某表数据
目录 基本概念 演示及源码 基本概念 因为要看某展示软件的效果,上午用了Qt实时对表进行更新操作! 这是非常low的表现.其中的一个原因就是效率问题! Qt工作笔记-Qt连接Mysql数据库,检索及修 ...
- 这就是搜索引擎--读书笔记五--索引的建立与更新
索引的建立和更新 索引的建立 前一总结里说到,如果索引结构建立好了,可以提高搜索的速度,那么给定一个文档集合,索引是如何建立起来的呢?建立索引的方式有很多种,在这里我就书中提到的三种方法简单总结一下. ...
- 每隔一段时间执行php_用php脚本,你如何定时更新商品列表
电商项目中为了提高抗并发能力,需要对商品列表做缓存,以下是更新缓存用的脚本: //PRODUCTION_为缓存商品列表的临时key //PRODUCTION为缓存商品列表key $con = mysq ...
最新文章
- yolo loss 将图像标注的真实事坐标转换到anchor坐标
- 进程间通信(4) 匿名管道
- 软件开发中的一些感想
- angular基本知识学习笔记 - Component的基本概念
- cygwin This indicates that the /etc/passwd (and possibly /etc/group) files should be rebuilt 问题解决办法
- mysql测试题汇总_总结:SQL练习【SQL经典练习题】
- struts2的通配符和动态方法调用
- mysql正则表达式匹配非_MySQL的正则表达式
- mysql由浅入深_由浅入深—MySQL数据库
- 迷茫中,要让人生更精彩
- html取php值,使用PHP从HTML中提取值
- 系统分析师教程(张友生)高清pdf下载
- 偏见:人工智能辅助决策的隐患
- PS去掉图片上的文字
- 在线抢购平台_项目预览
- 苹果新系统很鸿蒙!iPad终于能写代码了,iPhone竟成异地恋神器 | WWDC 2021
- java用zipOutputStream压缩后用WinRAR解压出现“不可预料的压缩文件末端”错误
- 多用途手机登录页面模板
- 酷比魔方 iwork10 pe重装系统 解决红屏 只需一个u盘
- 有道云笔记v6.70去除广告
热门文章
- 人机交互大作业_人机交互专业:多领域交叉的高能学科
- 学python的正确方法_学习Python最正确的步骤(0基础必备)
- shell不允许输入空字符_shell脚本编程之控制脚本
- Vue第三部分(2):Vue-CLI构建前后端分离项目以及打包部署
- 使用启动外部进程的方式解决there should be only one application object(使用qtwinmigrate中常出现)
- Qt文档阅读笔记-Qt Concurrent介绍及简单使用
- [Err] 1205 - Lock wait timeout exceeded; try restarting transaction Mysql 报错
- guiconsole 操作命令
- 四、StringBuffer StringBuilder String 区别
- 计组之中央处理器:3、数据通路(单总线结构、专用通路结构)