在 mysql 中设置 event_scheduler

Set event_scheduler in mysql

我正在尝试为公交车 table 将事件设置为开启,但它不起作用。 table 以及事件正在创建,但事件未被触发。我已经在 mysql- my.ini 中设置了这一行 event_scheduler = ON; 并重新启动服务器。

    // Create bus table
    stt.execute("CREATE TABLE IF NOT EXISTS bus"
            + "(id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,"
            + "mac VARCHAR(30) NOT NULL UNIQUE,"
            + "route int(11) NOT NULL,"
            + "latitude FLOAT(10,6) NOT NULL,"
            + "longitude FLOAT(10,6) NOT NULL,"
            + "created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)");

    stt.execute("CREATE EVENT IF NOT EXISTS  AutoDelete "
            + "ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 3 MINUTE "
            + "DO "
            + "DELETE FROM bus WHERE created_at < (NOW() - INTERVAL 3 MINUTE)");
    stt.execute("SET GLOBAL event_scheduler = ON");

引自reference manual

To repeat actions at a regular interval, use an EVERY clause. [...] For example, EVERY 6 WEEK means “every six weeks”.

在你的情况下,如果你想每三分钟重复一次这个动作,你的事件应该按如下方式创建:

CREATE EVENT IF NOT EXISTS  AutoDelete 
ON SCHEDULE EVERY 3 MINUTE
-- OPTIONAL: STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
-- OPTIONAL: ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH
DO 
    DELETE FROM bus WHERE created_at < (NOW() - INTERVAL 3 MINUTE)

要检查事件调度程序是否为 运行,您可以使用以下选项之一:

1. SHOW PROCESSLIST

show processlist;
+-----+-----------------+-----------+------+---------+------+------------------------+------------------+
| Id  | User            | Host      | db   | Command | Time | State                  | Info             |
+-----+-----------------+-----------+------+---------+------+------------------------+------------------+
| 243 | root            | localhost | NULL | Query   |    0 | NULL                   | show processlist |
| 244 | event_scheduler | localhost | NULL | Daemon  |    6 | Waiting on empty queue | NULL             |
+-----+-----------------+-----------+------+---------+------+------------------------+------------------+

请注意,事件调度程序是一个 "DAEMON" 进程

2。 SHOW VARIABLES

show global variables like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+