在MySQL中安排事件

时间:2014-12-03 03:29:07

标签: mysql scheduled-tasks scheduler

我一直试图找到这个答案很长一段时间没有用。这是我必须做的。我在下面的table创建了第一条记录。然后我想安排一个每周一次的事件,以便在此table中插入新记录。我需要的是这个事件要做的是每周从table的最后一行字段添加一周。

首选输出(类似这样)

+----+------------+------------+
| id |   start    |    end     |
+----+------------+------------+
|  1 | 2014-12-04 | 2014-12-11 | <-- Manually Inputed (base dates)
|  2 | 2014-12-11 | 2014-12-18 | <-- SQL Scheduled Events below
|  3 | 2014-12-18 | 2014-12-25 | (Every Thursday :D)
|  4 | 2014-12-25 | 2015-01-01 |
+----+------------+------------+

到目前为止的SQL语句

INSERT INTO `publication_dates` (`id`, `Start`, `End`) VALUES (null,"2014-12-04", DATE_ADD("2014-12-04",INTERVAL +1 WEEK));

我还没有为此创建一个事件,因为我根本不知道如何从它之前的行中获取信息。这将帮助我克服我在laravel项目中遇到的障碍。

感谢您提前的时间!

的MySQL Systax错误
DELIMITER &&
CREATE EVENT new_publication
ON SCHEDULE EVERY 1 WEEK STARTS '2014-12-04 00:00:00'
DO BEGIN

INSERT INTO publication_dates (`Start`, `End`) 
VALUES (NOW(), DATE_ADD(NOW(), INTERVAL 7 DAY));

END &&

1 个答案:

答案 0 :(得分:2)

如果您也允许事件创建第一行,则可以使用mysql event scheduler来实现此目的。

在您要输入的第一个日期开始活动。事件应该在下面运行插入查询。

INSERT INTO publication_dates (`start`, `end`) 
VALUES (NOW(), DATE_ADD(NOW(), INTERVAL 7 DAY));

要使事件起作用,您需要启用事件调度程序的mysql实例,或者您可以通过运行此查询将其打开:

SET GLOBAL event_scheduler = ON;

然后你必须创建一个每周四运行的事件,比如在午夜。

DELIMITER &&
CREATE EVENT run_on_thursdays
ON SCHEDULE EVERY 1 WEEK STARTS <starting thursday> ENDS <ending thursday>
do begin

<the insert query from above>

END &&

这将输入第一个值,并在每个星期四继续添加一行,直到星期四结束。