Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie lösche ich Datenzeilen aus der MySQL-Tabelle automatisch mit 24 Stunden nach Daten in der Tabelle?

Versuchen Sie, regelmäßige Ereignisse zu verwenden. Aktivieren Sie zunächst den Ereignisplaner mit

SET GLOBAL event_scheduler = ON;

Danach können Sie Ereignisse erstellen Dadurch wird die Erstellungszeit der Zeilen überprüft. Zum Beispiel

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

Wenn in Ihrer Tabelle keine Spalte mit dem Zeitstempel einer Zeilenerstellung vorhanden ist, können Sie einen Trigger erstellen, der den aktuellen Zeitstempel und die eingefügte Zeilenkennung in die Hilfstabelle einfügt.

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

Dann können Sie dieses Protokoll verwenden, um Schlüssel der Haupttabelle zu erhalten, die vor einer bestimmten Zeit erstellt wurde.

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 ;