MySQL数据库之定时器

CuCuGo @ 2023/4/1 12:20:39 / Count:128

偶尔会用到类似于让数据库自动完成一些数据的操作之类的动作,之前的思路一直是写个WinForm的程序定时运行,这样是灵活些,但是如果只是单个数据库内部的一些数据操作的时候,这样做就有点浪费了,所以用数据库自身的定时执行机制相对会更好一些。

比如:

  1. 定时清理数据
  2. 在每月的月底统计这个月的业务,将统计后的值放入统计表中
  3. 分段定时导出批量数据,进行数据迁移
  4. 定时整理其他系统推送来的数据,然后将整理后的数据放入本系统业务表中
-- 开启事件调度器
SET GLOBAL event_scheduler = ON;

-- 关闭事件调度器
SET GLOBAL event_scheduler = OFF;

-- 查看事件调度器状态
SHOW VARIABLES LIKE 'event_scheduler';

永久解决办法:

找到mysql根目录下my.ini文件,打开并在[mysqld]标记下方添加一句

event_scheduler = ON

即可。

注意: 不要添加到[mysql]标记下,而是[mysqld]标记下,不然会配置无效。

重启mysql 之后就会永久生效


创建

创建名称为e_autoTotal的事件,用于在每个月的第一天凌晨1点调用存储过程。

CREATE EVENT IF NOT EXISTS e_autoTotal
ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),INTERVAL 1 MONTH),INTERVAL 1 HOUR)
ON COMPLETION PRESERVE ENABLE
DO CALL 
insert into tb_test1 select * from tb_test_2;


修改

AlTER EVENT IF NOT EXISTS e_autoTotal
ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),INTERVAL 1 MONTH),INTERVAL 1 HOUR)
ON COMPLETION PRESERVE ENABLE
DO CALL 
insert into tb_test1 select * from tb_test_2;


启动与关闭

示例:启动名称为event_user的事件。

ALTER EVENT event_user ENABLE;

示例:关闭名称为event_user的事件。

ALTER EVENT event_user DISABLE;


删除

删除名称为event_user的事件。

DROP EVENT IF EXISTS event_user;



一些常用的时间间隔设置:

(1)每隔5秒钟执行

ON SCHEDULE EVERY 5 SECOND

(2)每隔1分钟执行

ON SCHEDULE EVERY 1 MINUTE

(3)每天凌晨1点执行

ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 1 HOUR)

(4)每个月的第一天凌晨1点执行

ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),INTERVAL 1 MONTH),INTERVAL 1 HOUR)

(5)每 3 个月,从现在起一周后开始

ON SCHEDULE EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK

(6)每十二个小时,从现在起三十分钟后开始,并于现在起四个星期后结束

ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK


查询系统中的定时器

在MySQL中可以通过查询information_schema.events表,查看已创建的事件。其语句如下:

SELECT * FROM information_schema.events; 

上一篇:
提升生产力:学会精力管理,实现工作与生活的平衡
下一篇:
MySQL 数据库操作