【问题标题】:How to delete mysql data from table at midnight?如何在午夜从表中删除 mysql 数据?
【发布时间】:2013-12-30 07:07:32
【问题描述】:

我有一个 mysql 表,我希望它在每晚午夜“清空”。我在网上搜索了答案,但没有发现任何似乎对我有帮助的东西。我有这个想法,使用 javascript 获取当前时间,然后运行 ​​if 语句,看看它是否等于午夜,以及是否要执行删除信息的 php 脚本。

Javascript:

var myVar=setInterval(function(){myTimer()},1000);

function myTimer()
{
var d=new Date();
var t=d.toLocaleTimeString();
    if(t == 12:00:00 AM){
            $.ajax({
                URL: 'delete.php';
            });
    };
};

删除.php:

<?php
require 'connect.php';
mysql_query("DELETE * FROM messages;");
?>

我已经通过将 if 语句中的时间设置为比我的实际时间提前几分钟的时间对此进行了测试,但它不起作用。

【问题讨论】:

  • 您使用的是什么虚拟主机?您可能应该设置一个 linux cronjob 以在午夜调用 PHP 文件。
  • 000webhost.com 我不确定 cronjob 是什么?对不起,我对编程很陌生。
  • 你当然不想用javascript来做。如果您有很多用户,而且都使用不同的时区,那么您的数据库最多每 15 分钟就会被清除一次(是的,有这样奇怪的时区)!
  • 此外,如果您在一个时区拥有数百名用户,那么您的服务器会在午夜一到突然收到数百个请求。
  • cron 作业是“慢性作业”或按计划发生的事情。它可以是 5 分钟,也可以是每天午夜一次,如您所愿。请参阅此示例以了解您的特定网络主机:free-installations.info/threads/…

标签: javascript php mysql sql


【解决方案1】:

实现您自己的事件调度程序,尤其是作为使用 JavaScript 的网页是一个坏主意。 也可以使用

  • 一个cron作业通过mysql命令行界面运行DELETE语句
    /path/to/mysql -u<user> -p"<password>" <db_name> -e "delete from messages"
     CREATE EVENT delete_messages_at_midnight 
     ON SCHEDULE EVERY 1 DAY STARTS CURDATE() + INTERVAL 1 DAY
     DO DELETE FROM messages;

如果你使用 MySQL 事件方法:

  • 使用SHOW PROCESSLIST 检查是否启用了事件调度程序。如果它打开,您应该会看到用户“event_scheduler”的进程“Daemon”。
  • 如果当前未启用调度程序,请使用SET GLOBAL event_scheduler = ON;启用调度程序。
  • 更多关于配置事件调度阅读here

【讨论】:

  • 我对 mysql 事件答案很感兴趣,不知道如何将它添加到我的 mysql 代码中,因为我正在使用 phpmyadmin。
  • @user3084715 您只需复制我在答案中提供的create event 语句并执行它 phpMyAdmin 或任何其他 MySQL 客户端工具即可。有关如何检查和配置 MySQL 事件调度程序的更多信息,请参阅更新的答案。
猜你喜欢
  • 2020-09-30
  • 2021-09-23
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
相关资源
最近更新 更多