博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【后端开发】配置mysql数据库,使其定时删除超时的数据项
阅读量:2357 次
发布时间:2019-05-10

本文共 1306 字,大约阅读时间需要 4 分钟。

  • 我创建了一个表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_insertON SCHEDULE EVERY 1 SECONDDO 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一下,发现之前那条记录已经被删除了,证明我的设置起作用了。
  • 结束。欢迎评论区讨论。

转载地址:http://czbtb.baihongyu.com/

你可能感兴趣的文章
ICMP协议
查看>>
SSL协议
查看>>
IMAP,POP3,SMTP协议
查看>>
数据库协议
查看>>
SNMP协议
查看>>
RDP远程桌面协议
查看>>
ssh Forward X11
查看>>
搜索引擎知识图谱相关结构化数据挖掘与去歧处理
查看>>
找到n个元素中的第二小元素
查看>>
linux命令之find
查看>>
linux命令学习之cut
查看>>
[think in java]知识点学习
查看>>
linux下线程调试 ulimit core
查看>>
linux 知识点拾遗
查看>>
java equal和==的区别
查看>>
虚继承与虚基类的本质
查看>>
函数式编程
查看>>
GitHub上整理的一些工具
查看>>
python range 与xrange的区别
查看>>
算法-最长递增子序列
查看>>