PHP的SQL TRIGGER活动

时间:2014-07-10 18:36:03

标签: php mysql sql triggers eventtrigger

我正在使用PHP + MySQL进行开发。

当到期日期发生时,我需要删除表中的行(元组)。

可能最好的方法是触发器,但我不知道该怎么做。

有人有一个例子吗?

1 个答案:

答案 0 :(得分:1)

您可以使用MySQL event schedulerCREATE 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服务器的管理员才能修改此配置。