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

时间:2014-07-04 07:01:20

标签: php mysql sql

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

是否可以通过php自动删除其到期日期已到达的行?代码I使用的是(有效期是日期): -

$query = "select * 
          from bonusdetails 
          where BonusType='Match Bonus' 
          order by Validity ASC limit 0,30;";

$result = mysql_query($query);

echo '<table>';
.....
.....
.....
echo '</table>';

?>

4 个答案:

答案 0 :(得分:4)

您可以尝试使用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;

答案 1 :(得分:0)

您可以创建Trigger,每当有人更新您的数据时,该DELIMITER $$ Create Trigger trigger_name AFTER UPDATE ON bonusdetails FOR EACH ROW BEGIN DELETE bonusdetails WHERE Validity > Now(); END$$ DELIMITER ; 都会删除您的记录。

{{1}}

答案 2 :(得分:0)

此查询将删除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())."'";

之后:

  • 您可以在代码中调用此查询(但这将是每次调用,因此这不是最佳解决方案)
  • Make a cron每天拨打一次(更好)

答案 3 :(得分:0)

  $conn = new mysqli($servername,$username,$password,$dbname);
  $query = "DELETE FROM Urls WHERE created_at < now()";
  $conn->query($query);

这可能会有所帮助