要达到如下目的:

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实现定时清空一张表的旧数据并保留几条数据相关推荐

  1. mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作

    1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...

  2. mysql数据库操作多表查询_MySQL数据库查询操作进阶——多表查询

    多表查询 在大部分情况下,我们用到的表都是彼此相关联的,所以我们会有相当大的需求用到跨表的查询,这个时候我们就需要将相关联的表连起来做多表查询. 多表查询分为连表查询和子查询,连表查询即将相关联的表连 ...

  3. kettle使用mysql作为资源库报错 创建资源库时只有25张表,原本应该46张表。

    kettle使用mysql作为资源库报错 创建资源库时只有25张表,原本应该46张表. 连用户表都没有 ,导致连 默认的 admin和guest都无法登陆自己的资源库!!!! 问题是 SQL语句里边使 ...

  4. mysql把一个表的字段赋值到另一张表,多表之间常用的操作

    文章目录 mysql多表之间的常用操作 1. 根据主键,把一个表的字段赋值到另一张表 2. replace into:把一张表的数据新增或更新到另一张表 mysql多表之间的常用操作 1. 根据主键, ...

  5. mysql 查询删除重复数据,保留其中一条数据

    一.查询重复数据 --------根据多个字段查询重复数据 SELECT* FROMtable_name a WHERE(a.字段1, a.字段2) IN (SELECT字段1,字段2FROMtabl ...

  6. matlab可以对多张表同时操作吗,update操作多张表

    sql 语句多张表UPDATE用法 一.当用一个表中的数据来更新另一个表中的数据,T-SQL提供多种写法(下面列出了二种),但建议用第一种写法,虽然传统,但结构清晰.飞.飞Asp技术乐园 并且要注意, ...

  7. Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表

    Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表 <?xml version="1.0"?> <!DOCTYPE hibernate-m ...

  8. 数据库SQL去重,保留一条数据

    利用SQL,删除掉重复多余的数据,并且只保留一条数据. 1.查找表中多余的重复记录,重复记录是根据单个字段(teamId)来判断 select * from team where teamId in ...

  9. oracle 快速移动数据和删除重复数据但保留其中一条数据

    在项目中会遇到将一个表的部分数据移动另一个表中的事情. insert into table1 (id,其他属性) select t.a,t.c...from table2 t 注意属性类型大小要一致 ...

最新文章

  1. php如何保存服务器会话,如何用PHP在服务器上创建会话?
  2. C# 7编程模式与实践
  3. 并查集:POJ1182-食物链(并查集比较高端的应用)
  4. 基于神经网络的控制器设计与仿真
  5. oracle控制文件修复,oracle控制文件的损坏或完全丢失的恢复办法
  6. 【ArcGIS遇上Python】ArcGIS python计算长时间序列多个栅格数据的平均值
  7. P3348-[ZJOI2016]大森林【LCT】
  8. 一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(3)--你的SP版本...
  9. ubuntu linux网关不通,Ubuntu 8.04不能上网等问题的解决
  10. 通达信副图指标公式:买卖黄金线(抄底用)
  11. [思考进阶]02 如何进行认知升级?
  12. 什么是 ECC 内存?(memory with ECC)
  13. 如何评判一个企业是否需要实施erp系统?
  14. 移动APP测试用例设计实践经验(转载)
  15. JMF(Java多媒体框架)资料汇总
  16. 手机在信号好的地方一直无服务器,解决手机信号不好的几种方法
  17. Web安全学习Week12
  18. 编程语言:Java与C语言C++的区别是什么?知道该学什么了吧!
  19. rsa/ecb/pkcs1padding php,PHPJAVA RSA/ECB/PKCS1Padding 加密解密
  20. ***腾讯云直播(含微信小程序直播)研究资料汇总-原创

热门文章

  1. java 在线编辑器_最好的Markdown开源在线编辑器,没有之一!
  2. url 特殊字符 传递参数解决方法
  3. 三相同步电机怎么接线图_三相电度表怎么看倍数
  4. 一键复制android代码,兼容安卓和ios实现一键复制内容到剪切板
  5. java实现base64加密解密
  6. 太和二中计算机考试,安徽省太和二中高二数学下册期末考试试题精选
  7. 方向盘左右能摇动_学车这么久了,你还不会打方向盘呢?
  8. CSS属性选择器温故-4
  9. 判断js中数据类型 的最短代码
  10. 实现小程序canvas拖拽功能