自动删除MySQL中的过期数据行


Auto delete Expired Data Row in MySQL

我在数据库中的bonusdetails表中添加了一些奖励代码行。所有奖金代码都有有效期。

php是否可以自动删除到期日已到的行?我使用的代码是(有效期为日期(:-

$query = "select * 
          from bonusdetails 
          where BonusType='Match Bonus' 
          order by Validity ASC limit 0,30;";
$result = mysql_query($query);
echo '<table>';
.....
.....
.....
echo '</table>';
?>

您可以尝试使用MySQL事件:

CREATE EVENT IF NOT EXISTS `dbName`.`eventName`
ON SCHEDULE
EVERY 1 DAY // or 1 HOUR
COMMENT 'Description'
DO
BEGIN
DELETE FROM `dbName`.`TableName` WHERE `expireDateCol` < NOW();
END

注意,MySQL事件调度程序需要在您的服务器上启用:

SET GLOBAL event_scheduler = ON;

此查询将删除Validity中日期已过的行。

$query = "DELETE FROM bonusdetails 
          WHERE BonusType = 'Match Bonus' 
          AND Validity < '".date('Y-m-d', time())."'";

如果ValidityDATETIME:

$query = "DELETE FROM bonusdetails 
          WHERE BonusType = 'Match Bonus' 
          AND Validity < '".date('Y-m-d H:i:s', time())."'";

之后:

  • 你可以在代码中调用这个查询(但每次都会调用,所以这不是最好的解决方案(
  • 让一个cron每天调用一次(更好(
  $conn = new mysqli($servername,$username,$password,$dbname);
  $query = "DELETE FROM Urls WHERE created_at < now()";
  $conn->query($query);

这可能对有帮助

您可以创建Trigger,它将在每次有人更新您的数据时删除您的记录。

DELIMITER $$
Create Trigger trigger_name
  AFTER UPDATE ON bonusdetails
  FOR EACH ROW BEGIN
  DELETE bonusdetails
  WHERE Validity > Now();
END$$ 
DELIMITER ;