Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak automatycznie usunąć wiersze danych z tabeli mysql po 24 godzinach od umieszczenia danych w tabeli?

Staraj się korzystać z regularnych wydarzeń. Aby rozpocząć, włącz Harmonogram wydarzeń za pomocą

SET GLOBAL event_scheduler = ON;

Następnie możesz utworzyć wydarzenie który sprawdzi czas utworzenia wierszy. Na przykład

CREATE EVENT recycling ON SCHEDULE EVERY 1 HOUR ENABLE 
  DO 
  DELETE FROM MyTable WHERE `timestamp_column` < CURRENT_TIMESTAMP - INTERVAL 24 HOUR;

Jeśli w Twojej tabeli nie ma kolumny ze znacznikiem czasu utworzenia wiersza, możesz utworzyć wyzwalacz, który wstawi bieżący znacznik czasu i wstawiony identyfikator wiersza do tabeli pomocniczej.

CREATE TRIGGER logCreator AFTER INSERT ON MainTable
  FOR EACH ROW 
  INSERT INTO LogTable (MainID, Created) VALUES(NEW.id, CURRENT_TIMESTAMP);

Następnie możesz użyć tego dziennika, aby uzyskać klucze głównej tabeli, która została utworzona przed określonym czasem.

delimiter |
CREATE EVENT cleaner ON SCHEDULE EVERY 1 HOUR ENABLE 
  DO 
  BEGIN
    DECLARE MaxTime TIMESTAMP;
    SET MaxTime = CURRENT_TIMESTAMP - INTERVAL 24 HOUR;
    DELETE FROM MainTable 
    WHERE id IN (SELECT MainID FROM LogTable WHERE Created < MaxTime);
    DELETE FROM LogTable WHERE LogTable.Created < MaxTime;
  END |
  delimiter ;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. dlaczego potrzebujemy połączenia lewego i prawego

  2. Maksimum grupy określonej kolumny

  3. Jaka jest różnica między utf8_general_ci a utf8_unicode_ci?

  4. Nie można połączyć się z serwerem mysql za pomocą go i docker - wybierz tcp 127.0.0.1:3306:connect:połączenie odrzucone

  5. Wydajność operatora MySQL IN na (dużej?) liczbie wartości