Mysql实现定时清空一张表的旧数据并保留几条数据(推荐)
作者:花花_新世界 发布时间:2024-01-17 06:38:11
要达到如下目的:
Mysql数据库会每隔一段时间(可以是2小时,也可以是一天,这个可以自定义),定时对一张库中的表做一个判断,如果这张表的数据超过了20条(这个数据也是自定义的,也可以是200条),就保留最新的10条数据(这个数据同样可以自定义,但要小于等于之前的超过数据条数)。
简单说一下解决的思路(从后往前推导):
1、开启一个定时器,这个定时器做了两件事:
⑴设置了时间间隔
⑵调用一个存储过程
2、写一个存储过程,此存储过程要做两件事:
⑴判断表的数据条数是否超过20,如果超过20才做下面的步骤。
⑵要保留最新的10条数据,删除其它的老数据。这个就需要表必须有一个递增的主键id,这样的话最新的数据id的值也就越大。只要找出当前表最大的id然后减10得到一个'删除节点',再在删除语句中的写 where id <'删除节点' 即可。这样虽然结果不一定准确,但可以大致实现效果。
假设现在有一个datas表,这张表中有一个主键id是递增的。这张表的数据会不断增加,现在要每隔5秒钟保留datas表的最新10条数据,其它的都删掉。
代码过程如下:
1.首先定义一个存储过程取名为pro_clear_data,注意竖线(“|”)一定不能丢
DELIMITER |
DROP PROCEDURE IF EXISTS pro_clear_data |
CREATE PROCEDURE pro_clear_data()
BEGIN
SET @datas_count=(SELECTCOUNT(id) FROM datas);
IF(@datas_count>20) THEN
SET @max_id=(SELECT MAX(id) FROM datas);
SET @max_id = @max_id - 10;
DELETE FROM `datas` WHERE id<@max_id;
END IF ;
END
|
2.创建定时器取名为event_time_clear_data
SET GLOBAL event_scheduler = 1;
CREATE EVENT IF NOT EXISTS event_time_clear_data
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
DO CALL pro_clear_data();
3.这个是最简单但是也是最重要的,我们要手动的启动这个定时器,要不然是没法工作的。
ALTER EVENT event_time_clear_data ON
COMPLETION PRESERVE ENABLE;
创建存储过程与创建定时器代码要分开执行
每隔5秒钟就会自动清空一次数据,保留最新的10条。
另外,关闭定时器的代码是:
ALTER EVENT event_time_clear_data ON
COMPLETION PRESERVE DISABLE;
删除存储过程的代码是:
DROP PROCEDURE pro_clear_data;
关于Event:
mysql5.1版本开始引进event概念。event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发。通过单独或调用存储过程使用,在某一特定的时间点,触发相关的SQL语句或存储过程。
删除Event:
DROP EVENT IF EXISTS event_time_clear_data1
来源:https://www.cnblogs.com/doubleflower/p/14183637.html


猜你喜欢
- 时间序列是指在一段时间内发生的任何可量化的度量或事件。尽管这听起来微不足道,但几乎任何东西都可以被认为是时间序列。一个月里你每小时的平均心率
- 本文实例讲述了python使用 request 发送表单数据操作。分享给大家供大家参考,具体如下:# !/usr/bin/env pytho
- 1 插件安装想要在vscode中使用jupyter,首先我们需要在vscode中安装插件Jupyter。在拓展中搜索jupyter直接安装即
- 在进行excel文件读取的时候,我自己设置了部分直接从公式获取单元格的值但是用之前的读取方法进行读取的时候,返回值为空import osim
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 需求如下: 1.模板页右边包含了一个登陆div,想让没登陆的时候这个div显示,登陆后该div隐藏 2.显示一个欢迎用户的div,主要是想通
- -- 创建库CREATE TABLE `rate` ( `uname` VARCHAR (300), `object`
- 1 基本信息- 模块主页:[github]- 类型:#第三方库2 安装方法pip install pythonping3 一般使用from
- 一、前言 前面我们学习了if分支判断和for循环语句,在这次推送中我们将继续了解循环大家庭的成员们。大家可以通过上面的流程图来了解
- 在做web端自动化测试用例编写过程中,大家有没有遇到窗口切换的情况,比如如下截图所示的商品列表页,点击任何一款产品后切换到这块产品详情页的情
- 使用python的json模块序列化时间或者其他不支持的类型时会抛异常,例如下面的代码:# -*- coding: cp936 -*-fro
- 在 Go 语言中切片是使用非常频繁的一种聚合类型,它代表变长的序列,底层引用一个数组对象。一个切片由三个部分构成:指针、长度和容量。指针指向
- 今天我们来探索python中大部分的异常报错首先异常是什么,异常白话解释就是不正常,程序里面一般是指程序员输入的格式不规范,或者需求的参数类
- 前言开始几天,我是使用很原始的方法,自己去获取天气预报截图,再手动发送给小姐姐。连续几天之后我一想:不对呀,我怎么说也是一个程序猿,怎么能用
- 说明:使用mysqldump –all-databases会导出所有库。但如果做主从,从主库dump出数据时,我们是不需要也不想要infor
- 1.get_dummies()pandas.get_dummies(data, prefix=None, prefix_sep='_
- 问题引入作为一名Golang开发者,线上环境遇到过好几次连接数暴增问题(mysql/redis/kafka等)。纠其原因,Golang作为常
- defer介绍defer是golang的一个特色功能,被称为“延迟调用函数”。当外部函数返回后执行defer。类似于其他语言的 try… c
- 问:握怎样测试 MySQL安装?答:可以通过以下命令测试MySQL服务器是否工作:C:\> C:\Program Files\MySQ
- 比如新浪微博发微博的输入框有一个已输入字数的统计,它的规则推测是:汉字和中文标点算 1 个字数,英文和其他符号算 0.5 个字数。不足 1