mysql 隔段时间自动删除数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 隔段时间自动删除数据相关的知识,希望对你有一定的参考价值。
设计了一个数据库,其中有user表,有一个表项是time,存储用户上一次登陆时间,想设计一下如果用户隔了两个月还没有进行第二次登陆,则自动删除此条目。请问如何实现
参考技术A 使用event_scheduler实现,这是个事件的自动调度机制,会定期执行事件中定义的语句;1 配置开启event scheduler
配置my.ini文件 中加上 event_scheduler = 1
重启mysql服务
验证event_scheduler是否已经开启: show variables like '%event%'; #值为 ON 表明已开启
2 创建event
drop event event_test_a;
CREATE EVENT event_test_a
ON SCHEDULE EVERY 1 day STARTS date_add(concat(current_date(), ' 00:00:00'), interval 0 second)
ON COMPLETION PRESERVE ENABLE
DO
delete from dbname.`user` where (`name`, `time` ) =
(
select `name`, max_time from
(select `name`, max(`time`) max_time from dbname.`user` group by 1) t
where max_time < date_add(current_timestamp, interval -2 month)
);
#说明:
ON SCHEDULE EVERY 1 day 指定循环间隔为每天执行
STARTS date_add(concat(current_date(), ' 23:59:00'), interval 0 second) 指定运行时间为23:59:00
ON COMPLETION PRESERVE ENABLE 指定创建完成后即启用,否则需手动启动
替换DO后边的语句中的相关部分(如数据库dbname, 表名,字段名等),DO 中也可以执行一个自定义的存储过程(该存储过程自已实现业务逻辑)
3 察看是否开始工作
SHOW PROCESSLIST; --看是否有event_scheduler的user的进程;
4 手动关闭事件
ALTER EVENT event_test_a DISABLE;
5 手动该事件为可用
ALTER EVENT event_test_a ENABLE;追问
select `name`, max(`time`) max_time from dbname.`user` group by 1 这个group by 1是什么意思,还有后边的t。求解释
追答这是个子查询,查出每个名称的最大时间,group by 是按名称分组,这样每个名称只有一条记录。
然后这个子查询的结果作为一个临时表,起别名为表 t 。
然后再加条件 max_time < date_add(current_timestamp, interval -2 month) 取出最大时间小于当前时间两月之前的。
最后把这个存在的 (name, time) 作为要删除的条件,可理解为 (`name`, `time` ) = (`name`, `time`)。
谢谢!
本回答被提问者采纳mysql怎么自动删除超过3天的数据
表tb_shopping中有一个时间字段sh_time
我要自动删除添加时间超过3天的数据应该怎么做
写程序加到crontab里面,让定时执行,然后去删。这个方法比较常见。
通过触发器来删。给这个表建立一个触发器,每当有insert或者update的时候,就触发一条sql,这个sql就是删除过期的数据 参考技术A
有两种方法
写程序加到crontab里面,让定时执行,然后去删。这个方法比较常见。
通过触发器来删。给这个表建立一个触发器,每当有insert或者update的时候,就触发一条sql,这个sql就是删除过期的数据。应该可以实现,但是不推荐这个方法,
写程序加到crontab里面,让定时执行,然后去删。这个方法比较常见
这个怎么搞啊 没接触过能给个例子吗
那你用的什么语言吧,我熟悉的是php。一般用php写个程序来删除。比如写个a.php 然后加到crontab里面。让执行php a.php。你首先去熟悉下linux的crontab。
追问额 我也是用php的
参考技术B mysql有自己的定时任务机制。 CREATE EVENT `e_call` ON SCHEDULE EVERY 10以上是关于mysql 隔段时间自动删除数据的主要内容,如果未能解决你的问题,请参考以下文章
我现在mysql 一条数据插入后,有一个字段是记录的时间,如何的实现10天后自动的删除这条数据
MYSQL——自动编号,增加列,删除列,插入数据,删除数据,修改数据