sql >> Databasteknik >  >> RDS >> Mysql

Hur tar jag bort rader med data från mysql-tabellen automatiskt 24 timmar efter data in i tabellen?

Försök att använda vanliga evenemang. För att komma igång, aktivera händelseschemaläggaren med

SET GLOBAL event_scheduler = ON;

Efter det kunde du crate-event som kommer att kontrollera skapandet av rader. Till exempel

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

Om det inte finns någon kolumn med tidsstämpel för en rad som skapats i din tabell, kan du skapa utlösare som infogar aktuell tidsstämpel och infogade radidentifierare i hjälptabellen.

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

Sedan kan du använda den här loggen för att hämta nycklar till huvudtabellen som skapades före en viss tid.

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 ;


  1. Ansluter Microsoft Excel till Xero

  2. Hur man returnerar alla otillförlitliga CHECK-begränsningar i SQL Server (T-SQL-exempel)

  3. varchar2(n BYTE|CHAR) standard -> CHAR eller BYTE

  4. Hur man tar bort efterföljande blanksteg i MySQL