mysql 删除时间范围数据_mysql数据库按时间删除数据总结

当数据库磁盘空间耗尽时,通过查询各表占用空间并按大小排序,找到占用空间大的表进行清理。文章介绍了如何通过SQL查询获取表空间信息,以及如何根据时间字段删除部分数据,提供了两种不同的删除语句示例。强调在实际开发中,通常会设置触发器定期清理数据。

今天访问程序时报如下异常:

a738d103109f97e61315de59709a5cf7.png

主要原因如下:

数据库所在磁盘空间不够所致。

于是登录数据库所在的服务器,查看了下数据库所占的磁盘空间如下:

4ea7a2f2559176557ea7dfabfce16b3f.png

可以看到磁盘的33G,被全部占满了,于是就开始了数据库表的清理工作。

1.首先执行以下sql语句,查询数据库中各个表所占空间大小,输出按降序排序

SELECT TABLE_NAME, CONCAT(TRUNCATE(data_length/1024/1024,2),' MB') AS data_size,

CONCAT(TRUNCATE(index_length/1024/1024,2),' MB') AS index_size

FROM information_schema.tables WHERE TABLE_SCHEMA = 'olderdb'

GROUP BY TABLE_NAME

ORDER BY data_length DESC;

输出结果如下:

652c60828ba90d7436ee75b53e969a1b.png

看见了吧,一亿多条数据,占用了十几G的内存空间。

那么如何删除了,首先查看表字段:

9acb00e076505acce256e4936f6beb4d.png

发现sttime字段是按照时间顺序插入的,这就简单了,直接按照时间段删除数据就可以了。具体的删除方法如下:

按时间段进行删除操作,sql如下:

① 使用BETWEEN关键字根据时间字段删除一定时间内的记录

DELETE FROM 表名 WHERE 时间字段 BETWEEN 开始时间 AND 结束时间

示例:

DELETE FROM tb WHERE CreateTime BETWEEN '2017-01-01 00:00:00' AND '2017-02-01 00:00:00'--删除tb表中2017年1月1日到2017年2月1日的数据

② 使用时间字段比较大小来确定删除范围

--语法:DELETE FROM 表名 WHERE 时间字段>=开始时间 AND 时间字段<=结束时间

示例:

DELETE FROM tb WHERE CreateTime>='2017-01-01 00:00:00' AND CreateTime<='2017-02-01 00:00:00'

ok,执行删除语句比较费时,数据量大的话可能要删几个小时,像我这种上G的数据量估计得删除一天了。

注意:

本文介绍的只是遇到突发状况,像我这种磁盘撑爆了,只能临时抱佛脚,在实际开发中,都是写触发器的,每隔一段时间调用下触发器后台删除就完了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值