Sử dụng DELETE với điều kiện date_column < NOW() - INTERVAL 30 DAY để xóa dữ liệu cũ.
Tạo bảng tin nhắn
mysql> CREATE TABLE DemoTable (
-> UserMessage TEXT,
-> UserMessageSentDate DATE
-> );
Query OK, 0 rows affected (0.59 sec)
mysql> INSERT INTO DemoTable VALUES('Hi', '2019-06-01'), ('Hello', '2019-07-02'), ('Awesome', '2019-05-04'), ('Good', '2019-01-10');
Query OK, 4 rows affected (0.11 sec)
Xóa hàng cũ hơn 30 ngày (giả sử hôm nay 2019-07-15)
mysql> DELETE FROM DemoTable WHERE UserMessageSentDate < NOW() - INTERVAL 30 DAY; Query OK, 3 rows affected (0.11 sec)
Kết quả (chỉ còn Hello 2019-07-02):
+-------------+---------------------+ | UserMessage | UserMessageSentDate | +-------------+---------------------+ | Hello | 2019-07-02 | +-------------+---------------------+ 1 row in set (0.00 sec)
Lưu ý quan trọng:
NOW()trả về DATETIME, so sánh với DATE sẽ tự chuyển đổi- Nên dùng
CURDATE()cho cột DATE:WHERE UserMessageSentDate < CURDATE() - INTERVAL 30 DAY - Luôn
SELECTtrước khiDELETEđể kiểm tra - Cân nhắc
PARTITION BY RANGEcho bảng log lớn để xóa nhanh (DROP PARTITION)