我正在使用PHP + MySQL进行开发。
当到期日期发生时,我需要删除表中的行(元组)。
可能最好的方法是触发器,但我不知道该怎么做。
有人有一个例子吗?
答案 0 :(得分:1)
您可以使用MySQL event scheduler。 CREATE EVENT手册页的最小示例将是您可能需要的基础:
CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
如果您想每10分钟清理一次,您可以使用
CREATE EVENT myevent
ON SCHEDULE EVERY 10 MINUTE
您的清算声明将是DELETE:
DO
DELETE FROM yourTable WHERE expiration_date < NOW();
这就是全部,MySQL将每10分钟自动执行一次。完成四行SQL:
CREATE EVENT clear_expirations -- a better name for the event
ON SCHEDULE EVERY 10 MINUTE -- as you need it
DO
DELETE FROM yourTable WHERE expiration_date < NOW();
修改强>
默认情况下,事件调度程序将被停止:
全局 event_scheduler 系统变量确定是否 事件计划程序已在服务器上启用并运行。它有一个 这三个值会影响事件调度,如下所述:
关闭:事件计划程序已停止。事件调度程序线程确实如此 没有运行,没有显示在SHOW PROCESSLIST的输出中,没有 预定的事件被执行。 OFF是默认值 event_scheduler。
当事件调度程序停止时(event_scheduler为OFF),它可以 通过将event_scheduler的值设置为ON来启动。 (见下 项。)
开启:启动事件调度程序;事件调度程序线程运行 并执行所有预定的事件。
...
已禁用:此值使“事件计划程序”无法运行。什么时候 事件调度程序是DISABLED,事件调度程序线程不是 run(因此不会出现在SHOW PROCESSLIST的输出中)。在 此外,事件调度程序状态不能在运行时更改。
您可以使用
获取此系统变量的值SELECT @@event_scheduler;
如果结果为OFF
,您可以使用
SET GLOBAL event_scheduler = 'ON';
您应该修改MySQL服务器的配置,以便事件调度程序将在mysqld进程的开头运行。
应该很清楚,您必须是MySQL服务器的管理员才能修改此配置。