1、数据库是否开启定时器
-- 查看是否开启定时器
SHOW VARIABLES LIKE '%sche%';-- 开启定时器 0:off 1:on
0或者off 表示关闭
1或者on表示开启
SET GLOBAL event_scheduler = 1;
2、创建表
-- 创建备份表
CREATE TABLE `task_count_copy` (
`uuid` int(32) NOT NULL AUTO_INCREMENT,
`task_id` varchar(32) COLLATE utf8_bin DEFAULT NULL,
`address_id` varchar(32) COLLATE utf8_bin DEFAULT NULL,
`device_id` int(11) DEFAULT NULL,
`unfinished_count` int(11) DEFAULT '0',
`finished_count` int(11) DEFAULT '0',
`error_count` int(11) DEFAULT '0',
PRIMARY KEY (`uuid`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_bin ROW_FORMAT=COMPACT;
3、写存储过程
-- 查看库中有哪些存储过程
SHOW PROCEDURE STATUS WHERE Db='hzq';
-- 创建存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS task_count_procedure $$
CREATE PROCEDURE task_count_procedure()
BEGIN
-- SQL语句
INSERT INTO task_count_copy (task_id, address_id)
VALUE
(
'0054471ead414d8ab23ae17fe1cc9f',
23
)
END $$
DELIMITER
4、创建定时器
-- 创建定时器
DROP EVENT IF EXISTS event_task_count;
CREATE EVENT event_task_count
-- ON SCHEDULE 计划任务,有两种设定计划任务的方式:
-- AT 时间戳,用来完成单次的计划任务。
-- EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的计划任务
-- 在两种计划任务中,时间戳可以是任意的TIMESTAMP 和DATETIME 数据类型,时间戳需要大于当前时间
-- 重复计划:
-- 在重复的计划任务中,时间(单位)的数量可以是任意非空(Not Null)的整数式,时间单位是关键词:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。
-- 其他的时间单位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建议使用这些不标准的时间单位。
ON SCHEDULE EVERY 30 SECOND
-- ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被Drop掉,建议使用该参数,以便于查看EVENT具体信息。
ON COMPLETION PRESERVE
-- 参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示系统不执行该事件
ENABLE
-- event需要执行的SQL语句或存储过程。
DO BEGIN
-- CALL语句调用一个先前用CREATE PROCEDURE创建的存储过程。
CALL task_count_procedure();
END
5、开启和关闭定时器
-- 开启事件
ALTER EVENT event_task_count ON
COMPLETION PRESERVE ENABLE;
-- 关闭事件
ALTER EVENT event_task_count ON
COMPLETION PRESERVE DISABLE;