2012-12-31 4 views
12

7 일 후에 MySQL 데이터베이스에서 일부 메시지를 삭제하고 싶습니다.특정 시간 후에 MySQL 레코드를 삭제하는 방법

내 메시지 테이블 행의 형식은 다음과 같습니다. id | 메시지 | 날짜

날짜는 일반 형식의 타임 스탬프입니다. 2012-12-29 17:14:53

저는 MySQL 이벤트가 cron 작업 대신에 갈 수있는 방법이라고 생각했습니다.

나는 경험 많은 SQL 사용자에게 간단한 질문인데 아래의 괄호 안에 삭제 메시지 부분을 어떻게 코딩합니까?

예제가 감사하겠습니다. 감사합니다.

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; 
$$; 

답변

14

이 조건을 사용하여 시도 할 수 있습니다 간단한 cron 스크립트. 이렇게하는 이유는 간단합니다. 코드를 유지 관리하기가 더 쉽고 추한 SQL 해결 방법이 없으며 시스템과 원활하게 통합됩니다. 따라 1and1 년대처럼, 호스팅 공유에 있으며, 이벤트를 만들 수 없습니다 누가이 사람들을 위해

+0

당신 요르단 입력 해 주셔서 감사합니다, 내가 가진 문제는 내가 Cron 스크립팅에 대해서 아무 것도 없다는 것입니다. 하지만 이벤트가 약간의 단점이 될 수있는 MySQL 스레드에서 실행된다는 것을 알고 있습니다. – Mike

7

트릭을 수행해야합니다.

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

그래서 전체 SQL 스크립트는 다음과 같습니다 것을 :

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; 

그러나, 당신의 장소에 내가 함께 주어진 문제를 해결할

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

감사합니다. @Michael Mior, 방금 해봤는데 잘 작동합니다. – Mike

+0

물론 적은 시간 간격으로 :-) – Mike

+0

도움이되었습니다.) –

2

는 대체 당신은 당신이했던 PHP 스크립트의 URL webcron 알려줄 필요가 webcron

을 사용하는 것입니다 달리는 것을 좋아하고, 당신이 원하는 간격으로 당신을 위해 그것을 방아쇠를 당길 것입니다.

관련 문제