mysql定时清空表数据_Mysql实现定时清空一张表的旧数据并保留几条数据
要达到如下目的:
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,注意竖线(“|”)一定不能丢1 DELIMITER |
2 DROP PROCEDURE IF EXISTS pro_clear_data |
3 CREATE PROCEDURE pro_clear_data()
4 BEGIN
5
6 SET @datas_count=(SELECTCOUNT(id) FROM datas); 7 IF(@datas_count>20) THEN 8
9 SET @max_id=(SELECT MAX(id) FROM datas);10 SET @max_id = @max_id - 10;
11 DELETE FROM `datas` WHERE id
13 END IF ;
14
15 END
16 |
2.创建定时器取名为event_time_clear_dataSET 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 2 3 COMPLETION PRESERVE ENABLE;
创建存储过程与创建定时器代码要分开执行
每隔5秒钟就会自动清空一次数据,保留最新的10条。
另外,关闭定时器的代码是:ALTER EVENT event_time_clear_data ON 2 3 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
mysql定时清空表数据_Mysql实现定时清空一张表的旧数据并保留几条数据相关推荐
- mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作
1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...
- mysql数据库操作多表查询_MySQL数据库查询操作进阶——多表查询
多表查询 在大部分情况下,我们用到的表都是彼此相关联的,所以我们会有相当大的需求用到跨表的查询,这个时候我们就需要将相关联的表连起来做多表查询. 多表查询分为连表查询和子查询,连表查询即将相关联的表连 ...
- kettle使用mysql作为资源库报错 创建资源库时只有25张表,原本应该46张表。
kettle使用mysql作为资源库报错 创建资源库时只有25张表,原本应该46张表. 连用户表都没有 ,导致连 默认的 admin和guest都无法登陆自己的资源库!!!! 问题是 SQL语句里边使 ...
- mysql把一个表的字段赋值到另一张表,多表之间常用的操作
文章目录 mysql多表之间的常用操作 1. 根据主键,把一个表的字段赋值到另一张表 2. replace into:把一张表的数据新增或更新到另一张表 mysql多表之间的常用操作 1. 根据主键, ...
- mysql 查询删除重复数据,保留其中一条数据
一.查询重复数据 --------根据多个字段查询重复数据 SELECT* FROMtable_name a WHERE(a.字段1, a.字段2) IN (SELECT字段1,字段2FROMtabl ...
- matlab可以对多张表同时操作吗,update操作多张表
sql 语句多张表UPDATE用法 一.当用一个表中的数据来更新另一个表中的数据,T-SQL提供多种写法(下面列出了二种),但建议用第一种写法,虽然传统,但结构清晰.飞.飞Asp技术乐园 并且要注意, ...
- Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表
Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表 <?xml version="1.0"?> <!DOCTYPE hibernate-m ...
- 数据库SQL去重,保留一条数据
利用SQL,删除掉重复多余的数据,并且只保留一条数据. 1.查找表中多余的重复记录,重复记录是根据单个字段(teamId)来判断 select * from team where teamId in ...
- oracle 快速移动数据和删除重复数据但保留其中一条数据
在项目中会遇到将一个表的部分数据移动另一个表中的事情. insert into table1 (id,其他属性) select t.a,t.c...from table2 t 注意属性类型大小要一致 ...
最新文章
- php如何保存服务器会话,如何用PHP在服务器上创建会话?
- C# 7编程模式与实践
- 并查集:POJ1182-食物链(并查集比较高端的应用)
- 基于神经网络的控制器设计与仿真
- oracle控制文件修复,oracle控制文件的损坏或完全丢失的恢复办法
- 【ArcGIS遇上Python】ArcGIS python计算长时间序列多个栅格数据的平均值
- P3348-[ZJOI2016]大森林【LCT】
- 一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(3)--你的SP版本...
- ubuntu linux网关不通,Ubuntu 8.04不能上网等问题的解决
- 通达信副图指标公式:买卖黄金线(抄底用)
- [思考进阶]02 如何进行认知升级?
- 什么是 ECC 内存?(memory with ECC)
- 如何评判一个企业是否需要实施erp系统?
- 移动APP测试用例设计实践经验(转载)
- JMF(Java多媒体框架)资料汇总
- 手机在信号好的地方一直无服务器,解决手机信号不好的几种方法
- Web安全学习Week12
- 编程语言:Java与C语言C++的区别是什么?知道该学什么了吧!
- rsa/ecb/pkcs1padding php,PHPJAVA RSA/ECB/PKCS1Padding 加密解密
- ***腾讯云直播(含微信小程序直播)研究资料汇总-原创