Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Xóa tất cả hàng cũ hơn 30 ngày trong MySQL

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 SELECT trước khi DELETE để kiểm tra
  • Cân nhắc PARTITION BY RANGE cho bảng log lớn để xóa nhanh (DROP PARTITION)