mysql 怎么实现定时自动添加表数据

ruidi1234 2019-07-25 09:45:57
问题背景:
1、表1设备清单表,
2、表2设备巡检周期表(日检、周检、月检、季度检、半年检、年检、自定义检查)
3、表2外键关联表1、一个设备可以有多种巡检方式。
4、表3 设备巡检记录表,记录设备巡检清单及巡检状态(未巡检、已巡检)
问题描述:
1、每月1日0点自动生成本月设备巡检数据并写入表3
2、写入时巡检状态默认未巡检。
请高手不吝赐教,不胜感激。

...全文
606 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruidi1234 2020-03-11
  • 打赏
  • 举报
回复
引用 2 楼 zhenzhenup 的回复:
可以使用event定时器,设定每个月执行一下,生成一份设备检查执行表。 根据检查类型,设定循环体,生成当月不同类型的检查执行明细表。
delimiter $$  
drop event if exists addplan;  -- 创建定时器
create event addplan
on schedule   
EVERY 1 MONTH       -- 每个月执行一次
 STARTS '2019-07-28 22:02:00'    -- 定时器执行开始时间
ON COMPLETION  PRESERVE ENABLE  
do  
begin  
  DECLARE pdate TIMESTAMP;   -- 定义变量执行日期
	DECLARE sdate TIMESTAMP;   -- 定义变量
	SET sdate = CURRENT_TIMESTAMP;   -- 变量取当前时间
	SET pdate = CURRENT_TIMESTAMP;
	WHILE pdate < ADDDATE(sdate,INTERVAL +1 MONTH) DO      -- 判断执行日期在当月内,循环
	INSERT INTO result(devid,devname,checksta,checktime) (SELECT A.devid,A.devname,'未巡检',pdate FROM devinfo A,devcheck B WHERE A.devid=B.devchid AND B.check='daycheck');  -- 插入日检计划明细
	set pdate = ADDDATE(pdate,INTERVAL +1 DAY);  --  根据前面插入的检查类型,执行日期+1天
  END WHILE;  -- 结束循环
end $$  
delimiter;
插入sql处可以根据不同巡检类型插入,执行日期间隔需根据检查类型来设定,比如月检,ADDDATE(pdate,INTERVAL +1 Month),以此类推。 最后我们来看下结果:
SELECT * FROM result;
希望对你有帮助
谢谢大咖指导
ruidi1234 2020-03-11
  • 打赏
  • 举报
回复
谢谢大咖知道
zhenzhenup 2019-07-28
  • 打赏
  • 举报
回复
可以使用event定时器,设定每个月执行一下,生成一份设备检查执行表。 根据检查类型,设定循环体,生成当月不同类型的检查执行明细表。
delimiter $$  
drop event if exists addplan;  -- 创建定时器
create event addplan
on schedule   
EVERY 1 MONTH       -- 每个月执行一次
 STARTS '2019-07-28 22:02:00'    -- 定时器执行开始时间
ON COMPLETION  PRESERVE ENABLE  
do  
begin  
  DECLARE pdate TIMESTAMP;   -- 定义变量执行日期
	DECLARE sdate TIMESTAMP;   -- 定义变量
	SET sdate = CURRENT_TIMESTAMP;   -- 变量取当前时间
	SET pdate = CURRENT_TIMESTAMP;
	WHILE pdate < ADDDATE(sdate,INTERVAL +1 MONTH) DO      -- 判断执行日期在当月内,循环
	INSERT INTO result(devid,devname,checksta,checktime) (SELECT A.devid,A.devname,'未巡检',pdate FROM devinfo A,devcheck B WHERE A.devid=B.devchid AND B.check='daycheck');  -- 插入日检计划明细
	set pdate = ADDDATE(pdate,INTERVAL +1 DAY);  --  根据前面插入的检查类型,执行日期+1天
  END WHILE;  -- 结束循环
end $$  
delimiter;
插入sql处可以根据不同巡检类型插入,执行日期间隔需根据检查类型来设定,比如月检,ADDDATE(pdate,INTERVAL +1 Month),以此类推。 最后我们来看下结果:
SELECT * FROM result;
希望对你有帮助
遇星 2019-07-26
  • 打赏
  • 举报
回复
mysql event了解一下

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧