mysql数据库按时间删除数据总结
今天访问程序时报如下异常:主要原因如下:数据库所在磁盘空间不够所致。于是登录数据库所在的服务器,查看了下数据库所占的磁盘空间如下:可以看到磁盘的33G,被全部占满了,于是就开始了数据库表的清理工作。1.首先执行以下sql语句,查询数据库中各个表所占空间大小,输出按降序排序SELECT TABLE_NAME, CONCAT(TRUNCATE(data_length/1024/1024,2),' MB
今天访问程序时报如下异常:
主要原因如下:
数据库所在磁盘空间不够所致。
于是登录数据库所在的服务器,查看了下数据库所占的磁盘空间如下:
可以看到磁盘的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;
输出结果如下:
看见了吧,一亿多条数据,占用了十几G的内存空间。
那么如何删除了,首先查看表字段:
发现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的数据量估计得删除一天了。
注意:
本文介绍的只是遇到突发状况,像我这种磁盘撑爆了,只能临时抱佛脚,在实际开发中,都是写触发器的,每隔一段时间调用下触发器后台删除就完了。
更多推荐
所有评论(0)