MySQL存储过程删数据,mysql 使用定时任务调用存储过程删除老数据

前言:由于项目需要,现需要做一个定时清理mysql老数据的功能。经再三考虑,决定通过调用数据库的存储过程来执行删除数据的任务,然后创建一个事件来定时调用存储过程。

实现前提

需要删除数据的表里必须有个字段,类型为date或datetime,用于记录该数据的生成时间。

编写存储过程

编写删除语句:

DELETE FROM test t WHERE t.createDate < DATE_SUB(CURDATE(),INTERVAL 5 DAY);

上面sql表示删除五天之前的老数据。编写后需要确认是否可以使用。

CURDATE() :时间函数,表示返回当前日期

createDate:table的字段,表示该行数据的创建时间(类型为date或datetime)

DATE_SUB(end_date,INTERVAL expr unit):表示的隔了多少单位之前的日期

如果是需要查之后的日期,可以使用DATE_ADD(start_date,INTERVAL expr unit)函数,两个函数查询结果相反,一个往前查日期,一个往后查日期

unit的取值主要有SECOND(秒)、MINUTE(分)、HOUR(时)、DAY(天)、MONTH(月)、YEAR(年)

定义将sql保存为存储过程:

CREATE PROCEDURE delete_data()

BEGIN

DELETE FROM test t WHERE t.createDate < DATE_SUB(CURDATE(),INTERVAL 5 DAY);

END

注意,存储过程是在cmd命令行上写的,则需要使用DELIMITER命令定义分割符,如果是navicat则不用

查看存储过程:

select * from mysql.proc where db=’数据库名’;

使用存储过程 :

call delete_data()

开启事件调度器:

SET GLOBAL event_scheduler = ON;

创建定时任务的事件:

create event del_event

on schedule

EVERY 1 DAY

STARTS '2020-3-28 00:00:00'

do call delete_data()

表示从2020-3-28零点开始,每隔一天执行del_data存储过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值