在实际工作中以前的一些项目会用数据库来存储业务日志方便后期查询,但是日志太多会造成数据查询效率低下,所以就需要定时进行清理日志。清理的办法有很多手动清理可以选择性删除,但是太耗费精力,使用mysql定时任务(event事件)
1.事件简介
事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。
事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。
事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。
2 事件的优缺点
2.1 优点
一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。
可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。
2.2 缺点
定时触发,不可以调用。
3.下面是事件
-- 首先先查看mysql是否开启定时任务开关
SHOW VARIABLES LIKE 'event_scheduler'
-- 未开启设置开启
SET GLOBAL event_scheduler = ON;
-- 查看已经设置好的定时任务
select * from mysql.event;
-- 创建定时任务 删除100天前的数据
DELIMITER $$
DROP EVENT IF EXISTS deleteLog;
CREATE EVENT deleteLog
ON SCHEDULE EVERY 300 SECOND
ON COMPLETION PRESERVE
DO BEGIN
delete from pay_trate_order where TO_DAYS(now())-TO_DAYS(trade_time)>100;
END$$
DELIMITER ;
定时任务可根据情况进行多种用途可根据自己情况来编写