Mysql实现定时删除表中的数据
最近做项目的时候,想要实现一种验证码几分钟内有效的功能,于是就想到了定时删除数据库中存在的数据从而实现该功能,然后温习了一下数据库事件、定时器的相关功能,查询了一些文章,在此分享一下实现的方法。
首先看一下自己的mysql有没有开启事件调度器,在mysql图形化界面新建查询或者直接在MySQL中输入以下代码
show variables like '%event_scheduler%';
得到结果应该如下图
Value属性为ON则表示已经打开,如果显示为OFF,则输入以下语句
set global event_scheduler=1;
之后该value值就变成on了,我们便可以开始定时删除数据的操作
首先查看你的表,在其中插入一条表示时间的列,用于记录比较,可以参考下我的(红框圈住的)
其中,列名起的名字后面要用,我这里起的是time,大家可以看一下我后面代码里面time字段要替换为你起的名字。数据类型选择timestamp(时间戳),默认值CURRENT_TIMESTAMP,这两个必须固定,默认值的作用是会在你插入数据是自动产生一个当前时间插入你的数据中。
这两步完成之后,就可以直接输入sql语句
USE xxx1;CREATE EVENT xxx2ON SCHEDULEEVERY 1 MINUTE DODELETE FROM xxx3 WHERE TIME< DATE_SUB(CURRENT_TIMESTAMP,INTERVAL 1 MINUTE);
解释一下,xxx1是你的数据库名,xxx2是事件名,你自己起一个就行,xxx3是你的表名。time替换为你的列名。
这里面有两个时间,第一个EVERY 1 MINUTE的意思是每1分钟调用一次该事件,第二个INTERVAL 1 MINUTE的意思是一分钟时间,DATE_SUB将CURRENT_TIMESTAMP也就是当前时间和1分钟相减,也就是当前时间再往前推一分钟(比如当前时间是11:49,往前推一分钟就是11:48)。如果TIME字段的值小于该值,也就说明time值为比当前时间一分钟以前更久远的数据,where条件成立,执行delete语句。
这两个时间都可以根据自己需要进行改动。
然后就可以实现每一分钟删除一次已存在时间超过一分钟的数据啦!(当然会有时间误差,因为是一分钟调用一次,假如调用的时候是59秒,那就会在1分59秒删除)
同时在这里说一下mysql里面时间大小的比较,比较通俗的说,越早的数据越小,也就是2021年10月1日减去2021年9月30日得到的结果是正的,反之是负的。
来源地址:https://blog.csdn.net/qq_53137566/article/details/130132508
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341