J'essaie de supprimer les entrées expirées dans une base de données MySQL, lors de la création ou de la mise à jour d'un champ appelé lastBeat est mis à jour avec CURRENT_TIME et j'utilise la requête suivante pour vérifier/supprimer les lignes antérieures à 20 secondes:MySQL supprimer la ligne après 'expiry'
DELETE * FROM `rmachines` WHERE
`lastBeat` < (NOW() - 20);
J'ai aussi essayé CURRENT_TIME au lieu de NOW()
Il y a 2 boucles principales:
mises à jour une ligne dans rmachines chaque seconde
Exécute la requête de suppression
Si 2 est exécutée rapidement, comme le temps passe à la minute suivante (à savoir 59-60 secondes) il supprime la ligne comme si elle avait expiré (même si elle ne l'a certainement pas!), Sinon elle se comporte bien.
Si 2 s'exécute une fois par seconde ce n'est pas si perceptible, la "fausse expiration" arrive rarement mais je l'exécute 5 fois par seconde pour exposer le 'problème'.
J'ai trouvé une solution, testé et semble fonctionner dans les mêmes scénarios:
a job to delete rows older than 3 months in mysql database
Mais quelqu'un peut me dire pourquoi ma méthode ne fonctionne pas?
Excellente réponse, merci. Je ne peux pas croire que j'ai négligé la possibilité de coulée, j'ai même fait SELECT MAINTENANT() - 20 et je n'ai pas remarqué! –