天天看點

mysql資料庫按時間删除資料總結

今天通路程式時報如下異常:

mysql資料庫按時間删除資料總結

主要原因如下:

資料庫所在磁盤空間不夠所緻。

于是登入資料庫所在的伺服器,檢視了下資料庫所占的磁盤空間如下:

mysql資料庫按時間删除資料總結

可以看到磁盤的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;

輸出結果如下:

mysql資料庫按時間删除資料總結

看見了吧,一億多條資料,占用了十幾G的記憶體空間。

那麼如何删除了,首先檢視表字段:

mysql資料庫按時間删除資料總結

發現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的資料量估計得删除一天了。

注意:

本文介紹的隻是遇到突發狀況,像我這種磁盤撐爆了,隻能臨時抱佛腳,在實際開發中,都是寫觸發器的,每隔一段時間調用下觸發器背景删除就完了。

繼續閱讀