2012-12-31 37 views
12

Tôi muốn xóa một số thư khỏi cơ sở dữ liệu MySQL của mình sau 7 ngày.Cách xóa bản ghi MySQL sau một thời gian nhất định

Hàng trong bảng tin của tôi có định dạng sau: id | tin nhắn | ngày

Ngày là dấu thời gian ở định dạng thông thường; 2012-12-29 17:14:53

Tôi đã nghĩ rằng một sự kiện MySQL sẽ là con đường để đi thay vì một công việc cron.

Tôi có những gì tôi đoán là một câu hỏi đơn giản cho một người có kinh nghiệm SQL, làm thế nào để tôi mã phần xóa tin nhắn trong dấu ngoặc vuông dưới đây?

Ví dụ sẽ được đánh giá cao, Cảm ơn.

DELIMITER $$ 
    CREATE EVENT delete_event 
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY 
    ON COMPLETION PRESERVE 
    DO 
    BEGIN 
     DELETE messages WHERE date >= (the current date - 7 days); 
    END; 
$$; 

Trả lời

14

Bạn có thể thử sử dụng điều kiện này:

WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY) 

Vì vậy mà kịch bản toàn bộ SQL trông như thế này:

CREATE EVENT delete_event 
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY 
ON COMPLETION PRESERVE 

DO BEGIN 
     DELETE messages WHERE date < DATE_SUB(NOW(), INTERVAL 7 DAY); 
END; 

Tuy nhiên, trên vị trí của bạn tôi sẽ giải quyết vấn đề nhất định với một tập lệnh cron đơn giản. Lý do để làm điều này rất đơn giản: dễ bảo trì mã, không có cách giải quyết SQL xấu xí, tích hợp thông suốt với hệ thống của bạn.

+0

Cảm ơn bạn đã nhập vào Jordan, vấn đề tôi gặp phải là không có gì về kịch bản Cron. Nhưng tôi nhận ra rằng Sự kiện chạy trên một chuỗi MySQL có thể là một bất lợi nhỏ – Mike

7

Điều này cần thực hiện thủ thuật.

DELETE FROM messages WHERE date < (CURDATE() - INTERVAL 7 DAY); 
+0

Cảm ơn @Michael Mior, tôi đã thử nó và nó hoạt động tốt – Mike

+0

Với khoảng thời gian ngắn hơn tất nhiên :-) – Mike

+0

Vui mừng đã giúp:) –

2

Đối với những người ra có những người đang ở trên một chia sẻ lưu trữ, giống như của 1and1, và không thể tạo ra sự kiện, một sự thay thế là sử dụng webcron

Bạn chỉ cần nói webcron url của kịch bản php bạn muốn muốn chạy, và họ sẽ kích hoạt nó cho bạn trong khoảng thời gian bạn muốn

Các vấn đề liên quan