MySQL中,有时候我们需要维护表中的数据信息,例如定时清空某个表中的数据,定时对某个表的数据进行处理,定时将一个表的部分数据备份等等需要定时操作的步骤,mysql的定时任务都可以实现。
下面的案例是创建一个对表插入数据的存储过程,然后创建一个定时任务执行该存储过程。
创建一张关于环境数据的表wjs_dust_record_02;将设备获取到的环境数据信息存储到该表中。创建一个存储过程,作用是将一条数据插入到表中。设置定时器,每秒钟执行一次该存储过程,打开定时器,查看该表中的数据结果。主要操作步骤如下:
1,创建wjs_dust_record_02表:
CREATE TABLE `wjs_dust_record_02` (
`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`device_sn` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '设备编号',
`upload_time` datetime(0) NULL DEFAULT NULL COMMENT '上传时间',
`temperature` int(11) NULL DEFAULT NULL COMMENT '温度',
`humidity` int(11) NULL DEFAULT NULL COMMENT '湿度',
`atmospheric_pressure` int(11) NULL DEFAULT NULL COMMENT '气压',
`wind_speed` int(11) NULL DEFAULT NULL COMMENT '风速',
`wind_direction` int(11) NULL DEFAULT NULL COMMENT '风向',
`tsp` int(11) NULL DEFAULT NULL COMMENT '总悬浮颗粒物TSP',
`pm10` int(11) NULL DEFAULT NULL COMMENT '可吸入颗粒物pm10',
`pm2p5` int(11) NULL DEFAULT NULL COMMENT '细微颗粒物pm2.5',
`noise` int(11) NULL DEFAULT NULL COMMENT '噪声',
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE,
INDEX `upload_time_idx`(`upload_time`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1492587 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '扬尘设备上传记录' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
2,创建名为timingpro 的存储过程
#创建存储过程
CREATE PROCEDURE timingpro ( )
BEGIN
insert into wjs_dust_record_02 (device_sn, upload_time, pm10, pm2p5, tsp) values('4058745992445', now(), 156, 335, 80);
END;
3,创建定时器timingJob:
#创建定时器
create event if not exists timingJob
on schedule every 1 second
on completion PRESERVE
do call timingpro();
4,打开定时器/关闭定时器
#启动定时器
SET GLOBAL event_scheduler = 1;
#停止定时器
SET GLOBAL event_scheduler = 0;
5,开启定时事件(默认是开启的,如果打开定时器,存储过程没执行就是事件未开启)
#开启事件
ALTER EVENT timingJob ON COMPLETION PRESERVE ENABLE;
#关闭事件
ALTER EVENT timingJob ON COMPLETION PRESERVE DISABLE;
6,查看定时器的状态(event_scheduler值为OFF表示定时器关闭的,只需要执行步骤4打开定时器即可)
#查看定时器状态
SHOW VARIABLES LIKE '%sche%';
查看结果,表wjs_dust_record_02中每秒钟被插入了一条数据: