mysql删除表数据的语句(Mysql实现定时清空一张表的旧数据并保留几条数据推荐)
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,注意竖线(“|”)一定不能丢
|
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 |
到此这篇关于Mysql实现定时清空一张表的旧数据并保留几条数据的文章就介绍到这了,更多相关Mysql定时清空数据内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://www.cnblogs.com/doubleflower/p/14183637.html
- mysql中innodb四种事务级别(MySQL InnoDB 锁的相关总结)
- mysql8.0.19.0正确安装图解(MySQL 8.0.23 主要更新一览新特征解读)
- mpp数据库的客户端工具(xampp默认mysql数据库root密码的修改)
- mysql索引原理及调优(mysql高级学习之索引的优劣势及规则使用)
- 如何正常查看mysql存储数据文件(Mysql文件存储图文详解)
- mysql错误代码之1064的解决方案(mysql错误代码之1064的解决方案)
- ubuntu20.2安装mysql(Ubuntu 14.04下mysql安装配置教程)
- mysql not exists用法(mysql中EXISTS和IN的使用方法比较)
- mysql8.0查询操作(MySQL 8.0 redo log的深入解析)
- mysql innodb存储原理(mysql innodb的重要组件汇总)
- mysql实验总结分析(MySQL查询截取的深入分析)
- oraclemysql知识点(详解Mysql和Oracle之间的误区)
- mysqlpxc性能(MySQL之PXC集群搭建的方法步骤)
- mysql分区表的优缺点(MySQL数据表分区策略及优缺点分析)
- mysql join规则(浅谈为什么MySQL不推荐使用子查询和join)
- mysql的binlog几种模式(MySQL系列之redo log、undo log和binlog详解)
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
- 2主力后腰缺阵 泰山队奇兵有望获重用,赛季0出场,迎来中超首秀(泰山队奇兵有望获重用)
- 三分71 生死战爆发 篮网旧将丁威迪今天成奇兵,助队赢球(三分71生死战爆发)
热门推荐
- asp.net中Session的操作
- html5加入图片(HTML5 图片预加载的示例代码)
- docker容器解决隔离的技术(Docker+selenium实现自动化健康报备的方法)
- nginx+ssl配置详解(nginx配置ssl实现https的方法示例)
- 云服务器弹性体现在哪些方面(云服务器的性能表现在哪些方面?)
- python的turtle库怎么画同心圆(详解python使用turtle库来画一朵花)
- sqlserver如何设置定时备份(SQL Server使用脚本实现自动备份的思路详解)
- django怎么创建模板文件(django模板加载静态文件的方法步骤)
- dedecms的使用教程(解析DedeCms中data目录下的sessions是什么文件)
- docker容器使用redis服务(docker安装redis设置密码并连接的操作)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9