简介
- 项目需求:客户购买课程(有时限),课程过期后,状态修改成过期,无法再使用;
- 方向:利用mysql定时器调用存储过程,自动修改数据库状态为过期;
实践
- 首先使用navicate创建一个存储过程,创建流程如下:
1. 点击新建函数:
2. 点击创建过程:
3. 输入存储过程的参数,如果存储过程不需要参数,可以直接点击完成即可;如果需要参数,varchar需要指定长度,否则会报错(本实例不添加参数);
4. 新建存储过程sql,将购买时间大于1天的商品全部修改成已过期状态:
BEGIN
#Routine body goes here...
#获取当前的时间
SET @now_str = date_format(now(), '%Y-%m-%d %H:%i:%s');
#根据当前时间以及购买时间,将大于等于1天的产品修改成过期状态
UPDATE goods_deal set deal_status = '2',update_time =@now_str where deal_status = '1' and TIMESTAMPDIFF(DAY, deal_time, now()) >= 1;
END;
5. 保存存储过程,输入名称(goods_status_update),完成后可以点击运行看看效果;
- 之后新建定时器,创建流程如下:
1. 点击新建事件:
2. 点击 "定义",调用存储过程:CALL goods_status_update;
3. 点击 "计划",定义调用事件周期,如下表示每十秒调用一次(可根据需求自定义调用事件周期):
4. 点击保存,输入定时器事件名称(goods_status_update),可以输入和存储过程一样的名称,方便记忆:
5. 点击保存的时候,会弹出以下对话框,表明定时器尚未开启,需要手动去开启;
- 手动开启定时器事件,调用存储过程
1. 查看定时器事件状态:SHOW VARIABLES LIKE "%event_scheduler%";
2. 修改定时器事件状态,ON为开启,OFF为关闭:SET GLOBAL event_scheduler = OFF;
再查看状态,已修改成开启状态,定时器事件将会自动调用存储过程;
总结
- 使用navicate工具创建存储过程,同时使用定时器事件去定时调用,被广泛应用于商品购买的时效性处理上,不用调用项目去手动执行,极大方便项目开发;
- 创建存储过程,创建定时器的整个流程并不困难,实践是检验认识真理性的唯一标准,自己动手,丰衣足食~