2012-09-13 2 views
3

항목이 PHP 및 MySQL에 삽입 된 후 24 시간이 지나면 테이블을 만들고 싶습니다.24 시간 후에 만료되는 SQL 항목

사용자가 내 서버와 상호 작용할 때마다 이전 프로세스를 삭제할 때마다 "삭제 프로세스"를 실행하는 것이 이상적입니다. 더 자주 발생하므로 삭제할 데이터가 많지 않으므로 몇 밀리 초 밖에 걸리지 않습니다.

각 항목에 날짜/시간 값을 추가했습니다.

어떻게하면됩니까?

+1

사용자가 내 서버 *와 상호 작용할 때마다 *는 무엇을 의미합니까? –

+0

이 (중복 된) 질문에 대한 답변을보십시오 : http://stackoverflow.com/questions/9472167/what-is-the-best-way-to-delete-old-rows-from-mysql-on- a-rolling-basis – Rex

+0

어느 부분이 당신에게 불명확합니까? PHP? SQL? – RedFilter

답변

11

당신이 사용할 수있는 MySQL의의 event scheduler 중 하나

  • 만료되면 자동으로 기록을 삭제하려면 :

    CREATE EVENT delete_expired_101 
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 24 HOUR DO 
    DELETE FROM my_table WHERE id = 101; 
    
  • 는 모든 만료 된 기록의 자동 제거를 실행하려면 정기적 인 기준 :

    CREATE EVENT delete_all_expired 
    ON SCHEDULE EVERY HOUR DO 
    DELETE FROM my_table WHERE expiry < NOW(); 
    
+0

와우! 나는 그 질문을하지도 않았고 당신은 완전히 새로운 것을 발견했습니다! 정말 고마워! – Stefan

+0

매 시간마다 원한다고해도 MySQL에 '매 X 시간마다'라는 특정 숫자를 알려야했습니다. 예 : '1 시간마다 일정 예약' – Nick

0

Cron Job을 사용하여 살펴볼 수 있습니다. 요구 사항과 일치하는 24 시간마다 한 번씩 실행하십시오.

이 사용자가 상호 작용 할 때 삭제 처리를하지 말아야

Delete MySQL row after time passes

2
  1. 도움이 될 것입니다. 그것은 당신이 cronjob에 (매 분/시간)
  2. 당신이 인덱스에 추가 된 타임 스탬프 값을 원하는 다음 DELETE FROM table WHERE added < FROM_UNIXTIME(UNIX_TIMESTAMP()-24*60*60)
  3. 어쩌면 당신에 테이블을 분할 Partitions을 체크 아웃하고 싶을 것이다 실행하겠습니다을 사용한다, 일을 속도가 느려집니다 다른 테이블이 있지만 하나의 테이블로 작동합니다. 장점은 항목을 삭제할 필요가없고 매일 매일 별도의 테이블을 사용한다는 것입니다.
  4. 나는 많은 데이터가 테이블을 느리게한다고 생각한다. 어쩌면 당신은 EXPLAIN (MySQL Manual)를 사용하여 인덱스 (MySQL Manual)
  5. UPDATE 체크 아웃 eggyal's answer 사용하여 SELECT 쿼리를 최적화한다 - 이것은 살펴 본다 가치가 또 다른 접근 방식이다.
+1

정확한 24 시간 정밀도가 필요한 경우 테이블에 대한 쿼리도 제한해야합니다. 그러나 IMO가 최선의 방법입니다. 이 테이블은 이미 InnoDB 엔진에 적합하지 않은 경우에 가장 적합 할 것이다. –

관련 문제