MySQL定时任务event,储存过程(定时删除指定时间前90天指定表的数据)

本文介绍如何使用MySQL的存储过程和事件功能实现定时清理数据库中指定天数前的日志记录。通过创建日志表、事件及存储过程,设置事件调度器等步骤,实现自动化数据清理。

原文链接: https://blog.youkuaiyun.com/sxdtzhaoxinguo/article/details/33733227

<span style="font-family: 'Microsoft YaHei'; font-size: 14px;">MySQL定时任务event</span>

由于一些业务需求,我们可能需要定时清除数据库一些废弃的数据,可以使用mysql的存储过程和事件来完成。

下面例子定时清除日志表tbl_base_count中指定天数前的数据

1.创建日志表tbl_base_count:

  1. CREATE TABLE `tbl_base_count` (

  2. `id` int(11) NOT NULL AUTO_INCREMENT,

  3. `CAPTCHA` varchar(12) COLLATE utf8_bin NOT NULL,

  4. `PHONE` varchar(12) COLLATE utf8_bin NOT NULL,

  5. `SENDTIME` varchar(32) COLLATE utf8_bin NOT NULL,

  6. PRIMARY KEY (`id`)

  7. ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;


2.创建事件e_del_tbl_base_count:

  1. CREATE EVENT `e_del_tbl_base_count`

  2. ON SCHEDULE EVERY 1 DAY STARTS '2013-06-23 17:33:43'

  3. ON COMPLETION NOT PRESERVE ENABLE DO CALL p_del_count (90);

上面代码表示从2013-07-30 17:33:43起每一天执行一次p_del_count这个存储过程,并带上参数

 

3.创建存储过程:

  1. p_del_count

  2. DELIMITER $$

  3.  
  4. --

  5. -- 存储过程

  6. --

  7. CREATE PROCEDURE `p_del_count`(IN `date_inter` INT)

  8. BEGIN

  9. DELETE FROM LOG WHERE (TO_DAYS(NOW()) - TO_DAYS(FROM_UNIXTIME(<span style="font-family: Consolas, 'Courier New', Courier, mono, serif; line-height: 18px;">SENDTIME</span>)))>=date_inter;

  10. END$$

  11. DELIMITER ;

按事件传过来的参数90,删除操作时间90天之前的数据

这样mysql就会定制每天去执行这个任务了。

4.(一)查看当前是否已开启事件计划(调度器)有3种方法:

  1. SHOW VARIABLES LIKE 'event_scheduler';

  2. SELECT @@event_scheduler;

  3. SHOW PROCESSLIST;

5.(二)开启事件计划(调度器)开关有4种方法:

  1. SET GLOBAL event_scheduler = 1;

  2. SET @@global.event_scheduler = 1;

  3. SET GLOBAL event_scheduler = ON;

  4. SET @@global.event_scheduler = ON;

键值1或者ON表示开启;0或者OFF表示关闭;


6.(三)事件开启与关闭:

  1. 开启某事件:ALTER EVENT e_del_logs ON COMPLETION PRESERVE ENABLE;

  2. 关闭某事件:ALTER EVENT e_del_logs ON COMPLETION PRESERVE DISABLE;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值