一号优惠经验分享网
51福利网的各种薅羊毛福利经验笔记

mysql的event(事件)用法详解定时删除30天以前的数据

如需定时每天删除数据库中某个数据表30天前的数据。

使用数据库 mysql的event(事件)

51福利网

参考资料可以自行百度。下面提供2个我找的教程:

教程一:详细讲解

教程二:


-- 开启事件
SET GLOBAL event_scheduler = 1;  
SET @@global.event_scheduler = 1;  
SET GLOBAL event_scheduler = ON;  
SET @@global.event_scheduler = ON;
-- 创建存储过程
CREATE PROCEDURE `prc_del_alarm`(IN date_inter int) COMMENT '自动删除告警'
BEGIN
delete from yd_alarminfo where (TO_DAYS(NOW()) - TO_DAYS(eventTime))>=date_inter;
END
-- 创建事件,调度。每天执行一次
CREATE EVENT `auto_delete_alarm` ON SCHEDULE EVERY 1 DAY STARTS '2020-06-08 11:00:00'
ON COMPLETION PRESERVE ENABLE COMMENT '自动删除90天以前的告警数据' 
DO call prc_del_alarm(90);



-- 手动执行存储过程
call prc_del_alarm(90);



SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;

-- 查看库下的存储过程,两个都可以
select name from mysql.proc where db='test01';
show procedure status where db='test01';


-- 查看事件
SHOW EVENTS
-- 删除事件
DROP EVENTS IF EXISTS updateInfoStatus
-- 临时关闭事件
ALTER EVENTS updateInfoStatus DISABLE
-- 开启事件
ALTER EVENTS updateInfoStatus ENABLE

下面用一个使用了宝塔面板的范例:

要求:每天0点自动删除数据表30天前的数据

①用root用户登录数据库,找到相应网站数据库;

②创建定时事件

DELETE FROM `数据表名` WHERE (TO_DAYS(NOW()) - TO_DAYS(时间字段名))>=30

进行相比,然后超过30天得就删除

这样就可以每天定时删除了,如果没有被删除,请看下事件开关是不是被系统关了。

具体查看☞宝塔服务器重启事件自动关闭处理方法

MySQL的事件同时支持多条语句

当你在创建事件时,你可以在EVENT定义中列出多条语句,它们会按照你给出的顺序依次执行。

CREATE EVENT a  
ON SCHEDULE EVERY 1 DAY  
DO  
    BEGIN  
        -- 这是第一条语句  
        aaa;  
        -- 这是第二条语句  
        bbb;  
    END;

宝塔面板也支持多条语句事件同样可以直接在语句前后分别加上BEGIN 和 END;

比如下面的宝塔面板事件多条sql语句

忽略最后的代码错误提示,添加成功后还是会执行的。

如果提交出现错误提示不能提交,请从下面检查:

我们可以分析以下几个可能的问题:

  1. 权限问题:事件创建者可能没有足够的权限来执行这些删除操作。确保事件创建者(在这个例子中是root@localhost)有足够的权限来删除这些表中的数据。
  2. 表不存在:确保所有提到的表(例如wp_usermetawp_ice_info等)都存在。如果表不存在,那么查询将会失败。
  3. 子查询问题:在删除操作中,你使用了子查询来获取ID。确保这些子查询返回有效的结果。如果子查询没有返回任何结果,那么对应的删除操作将会失败。
  4. 日期和时间格式:确保你提供的开始时间格式正确。错误信息中的时间格式看起来是正确的,但始终确保它符合MySQL的日期和时间格式要求。
  5. 事件语法:确保事件的定义语法是正确的。事件定义可能包含语法错误或其他问题,导致查询失败。

为了解决这个问题,你可以尝试以下步骤:

  1. 检查权限:确保事件创建者有足够的权限来执行这些删除操作。
  2. 检查表是否存在:使用SHOW TABLES;命令来确认所有提到的表都存在。
  3. 检查子查询:运行子查询,确保它们返回有效的结果。
  4. 检查事件语法:仔细检查事件定义,确保语法正确。
  5. 查看详细的错误日志:通常,MySQL会提供更详细的错误信息,可以帮助你更准确地确定问题所在。

如果以上步骤都不能解决问题,你可能需要提供更多的上下文信息或错误日志,以便进一步分析问题原因。

时间戳相关问题

如果是时间戳格式,可以用当天时间戳减去相应天数插值,

MySQL获取当前时间戳方式:

SELECT unix_timestamp(now())

一天的时间戳值就是24*60*60,3天前的时间搓就是当前时间戳减去3*24*60*60

比如删除3天前的数据(数据是时间戳格式)

DELETE FROM `数据表名` WHERE `数据字段名` < (unix_timestamp(now()) -259200)

打赏
一号优惠 · 51福利网薅羊毛福利具有时效性,如已失效,请留言
文章名称:《mysql的event(事件)用法详解定时删除30天以前的数据》-一号优惠 · 51福利网
免责申明:本站所有活动信息均来自网络,如有失效,不实或侵权,请联系我们删除。谢谢

评论 抢沙发

一号优惠经验分享网最新最全薅羊毛,现金红包线报网

一号优惠经验分享网提供每日最新内部优惠,薅羊毛活动,现金红包领取,免费福利和网赚福利手机赚钱线报,打造中国最受欢迎的网赚信息发布平台!51福利网

51联盟线报群赚钱·合作·帮助

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册