Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como faço para excluir linhas de dados da tabela mysql automaticamente com 24 horas após os dados na tabela?


Tente usar eventos regulares. Para começar, ative o Agendador de eventos usando
SET GLOBAL event_scheduler = ON;

Depois disso, você pode criar evento que verificará o tempo de criação das linhas. Por exemplo
CREATE EVENT recycling ON SCHEDULE EVERY 1 HOUR ENABLE 
  DO 
  DELETE FROM MyTable WHERE `timestamp_column` < CURRENT_TIMESTAMP - INTERVAL 24 HOUR;

Se não houver coluna com timestamp de criação de linha em sua tabela, então você pode criar um trigger que irá inserir timestamp atual e identificador de linha inserido na tabela auxiliar.
CREATE TRIGGER logCreator AFTER INSERT ON MainTable
  FOR EACH ROW 
  INSERT INTO LogTable (MainID, Created) VALUES(NEW.id, CURRENT_TIMESTAMP);

Então você pode usar este log para obter as chaves da tabela principal que foi criada antes do horário específico.
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 ;