Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да изтрия редове с данни от mysql таблица автоматично с 24 часа след данните в таблицата?

Опитайте се да използвате редовни събития. За да започнете, активирайте Планировчика на събития с помощта на

SET GLOBAL event_scheduler = ON;

След това можете да създадете събитие което ще провери времето за създаване на редове. Например

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

Ако във вашата таблица няма колона с времеви печат на създаване на ред, тогава можете да създадете тригер, който ще вмъкне текущо времеви печат и вмъкнат идентификатор на ред в спомагателната таблица.

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

След това можете да използвате този дневник, за да получите ключове от основната таблица, която е създадена преди определено време.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Игнорирайте определени критерии WHERE

  2. Еквивалентът на функцията на SQLServer SCOPE_IDENTITY() в mySQL?

  3. Достъпът е отказан за 'user'@'localhost'

  4. Получаване на MySQL път в командния ред

  5. Актуализирайте стойност на колона, като замените част от низ