Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso eliminare automaticamente righe di dati dalla tabella mysql con 24 ore dopo i dati nella tabella?

Prova a usare eventi regolari. Per iniziare, abilita l'Utilità di pianificazione eventi utilizzando

SET GLOBAL event_scheduler = ON;

Dopodiché puoi crate event che controllerà il tempo di creazione delle righe. Ad esempio

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

Se nella tabella non è presente alcuna colonna con il timestamp della creazione di una riga, puoi creare un trigger che inserirà il timestamp corrente e l'identificatore di riga inserito nella tabella ausiliaria.

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

Quindi puoi utilizzare questo registro per ottenere le chiavi della tabella principale che è stata creata prima di un'ora specifica.

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 ;