sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo elimino filas de datos de la tabla mysql automáticamente con 24 horas después de que los datos estén en la tabla?

Trate de usar eventos regulares. Para comenzar, habilite el Programador de eventos usando

SET GLOBAL event_scheduler = ON;

Después de eso, podrías crate event eso verificará el tiempo de creación de filas. Por ejemplo

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

Si no hay una columna con la marca de tiempo de la creación de una fila en su tabla, entonces puede crear un disparador que insertará la marca de tiempo actual y el identificador de fila insertado en la tabla auxiliar.

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

Luego, puede usar este registro para obtener las claves de la tabla principal que se creó antes de una hora específica.

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 ;