【后端开发】配置mysql数据库,使其定时删除超时的数据项

  • 我创建了一个表session,有三个字段user_account, session_id, time。我们只需要关注time这个字段。在mysql中该字段是bigint类型,也就是c++中的long。
  • time保存的是上一次user_account用户访问服务端的时间。我要做的是,设置登录有效时间是5分钟,也就是说如果5分钟之内,用户没有再次访问服务端的话,就会删除它的这条记录。
  • 我的实现思路是,设置一个定时任务,让他每隔5分钟遍历一次session表,删除那些超时的数据,所谓超时,就是当前系统时间减去记录在time里面的时间大于5分钟。
  • 首先来学习一些东西:
    • 首先在创建定时任务之前要开启event_scheduler,具体如下:
      sql SET GLOBAL event_scheduler = 1;

      • 用如下方法查看是否开启成功:
      SHOW VARIABLES LIKE 'event_scheduler';
      
      • 然后自己先用下面的小例子测试一下,看是不是真的可以:
      CREATE TABLE aaa(timeline TIMESTAMP);
      CREATE EVENT e_test_insert
      ON SCHEDULE EVERY 1 SECOND
      DO INSERT aaa VALUE(CURRENT_TIMESTAMP);
      

      然后立马查看aaa中的内容select * from aaa;如果为空则失败。

      • 测试完了不要忘了关闭哪个定时任务,否则服务器炸了,不要来找我:
       alter event e_test_insert disable;
      
      • 顺便把aaa表清空
       delete from aaa ;
      
      • 然后删除任务
      drop event e_test_insert;
      
      • 查看所有任务
      show events;
      
  • 下面进入正题:
 create event delInvalidSession 
 on schedule every 5 minute 
 do 
 delete from session 
 where timestampdiff(minute,from_unixtime(time),now())>5;

解释:
create event delInvalidSession创建了一个名为delInvalidSession的任务。
on schedule every 5 minute设置没5分钟运行一次。
do 都后面就是一般的sql语句了,没有什么好奇的。
然后关于timestampdiff(minute,from_unixtime(time),now())这个函数,解释如下,也可以自己去查阅官方文档。
在这里插入图片描述

  • from_unixtime(time)这个函数,把数据库中以long格式存储的从’1970-01-01 00:00:00‘开始到现在的秒数,转化为日期时间格式,用于计算。这里防止另一个相关函数的解释:
    在这里插入图片描述
    最后放一张我执行的结果图:
    在这里插入图片描述
    我在写博客的同时select了一下,然后我写完上面的内容(超过5分钟),在select一下,发现之前那条记录已经被删除了,证明我的设置起作用了。
  • 结束。欢迎评论区讨论。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值