Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment supprimer automatiquement des lignes de données de la table mysql 24 heures après que les données ont été introduites dans la table ?

Essayez d'utiliser des événements réguliers. Pour commencer, activez le planificateur d'événements à l'aide de

SET GLOBAL event_scheduler = ON;

Après cela, vous pouvez crate event qui vérifiera le temps de création des lignes. Par exemple

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

S'il n'y a pas de colonne avec l'horodatage d'une création de ligne dans votre table, vous pouvez créer un déclencheur qui insérera l'horodatage actuel et l'identifiant de ligne inséré dans la table auxiliaire.

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

Ensuite, vous pouvez utiliser ce journal pour obtenir les clés de la table principale créée avant une heure spécifique.

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 ;