mysql中的定时器及存储过程

需求:今天遇到mysql中的日志表需要设置最大存储量、最多存储天数,多余的删除


存储过程代码如下:

 DELIMITER //
DROP PROCEDURE if exists log_system; 
CREATE PROCEDURE log_system (in u_n INT,u_d INT,s_n INT,s_d INT)//u_d用户日志天数,u_n用户日志数,s_n系统日志数,s_d系统日志天数
BEGIN
	 SET u_d = (SELECT userloggingDate FROM logging_prameter); //通过设置表得到用户日志天数
	 DELETE  FROM user_logging  
			WHERE time <= (select date_add(sysdate(),interval - u_d day) as yestoday);//通过算法算出系统时间前去用户日志天数,得到应该删除的时间点
	 IF (SELECT COUNT(*) FROM user_logging) > (SELECT userLoggingNumber FROM logging_prameter) THEN
		 SET u_n = (select COUNT(*) FROM user_logging)-(SELECT userLoggingNumber FROM logging_prameter);
		 DELETE FROM user_logging ORDER BY time LIMIT u_n;
	 END IF;
	
	SET s_d = (SELECT sysLoggingDate FROM logging_prameter); 
	DELETE  FROM sys_logging  WHERE time <= (select date_add(sysdate(),interval - s_d day) as yestoday);
	IF (SELECT COUNT(*) FROM sys_logging) > (SELECT sysLoggingNumber FROM logging_prameter) THEN
		 SET s_n = (select COUNT(*) FROM sys_logging)-(SELECT sysLoggingNumber FROM logging_prameter);
		 DELETE FROM sys_logging ORDER BY time LIMIT s_n;
	END IF;
END;
//DELIMITER

定时器代码如下:

  DELIMITER //
    SET GLOBAL event_scheduler = ON;  
    DROP EVENT IF EXISTS `eventSysUserLogging`;  
    CREATE    EVENT IF NOT EXISTS `eventSysUserLogging`  
       
    ON SCHEDULE  
    EVERY 1 DAY   
     STARTS TIMESTAMP(CURRENT_DATE,'17:30:00')  
     ON COMPLETION PRESERVE ENABLE  
    DO  
        BEGIN  
            CALL log_system(@u_n,@u_n,@s_n,@s_d);//调用储存过程
        END;  
// DELIMITER 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值