在预定时间内更新MySQL中的数据

时间:2015-09-24 11:28:01

标签: mysql database datetime

我想在预定时间内更新我的数据。我的问题是我无法等到我在当前实时日期输入数据库的日期。例如,我在我的数据库中有2015/24/9 19:50:00,现在我想将它等于当前的实时日期,以便我可以更新数据库中的特定行。如果我不这样做,金额字段将在每行中乘以5。我想在特定的行和时间中将金额乘以5

代码:

CREATE EVENT myeventsdasa11s
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE

DO
  UPDATE messagesd
  SET amount = amount*5
  WHERE DATE = (the the current real time date);

3 个答案:

答案 0 :(得分:2)

DATETIMETIMESTAMP值与浮点值一样,难以比较数值相等。换句话说,如果它发生在NOW() = datetimestamp,那就是一个幸运的意外。处理事件时尤其如此:事件实际上在预定时间后不久开始运行。

所以,而不是说这样的话

 `DATE` = NOW()

说出这样的话

 `DATE` BETWEEN NOW() - INTERVAL 10 SECOND 
            AND NOW() + INTERVAL 10 SECOND

当然,如此狭窄的时间间隔会使您严重依赖事件调度程序的时间准确性。您最好在表格中添加LAST_UPDATED DATETIMEUPDATE messagesd SET amount = amount * 5, LAST_UPDATED = `DATE` WHERE `DATE` >= NOW() - INTERVAL 1 MINUTE AND (`DATE` > LAST_UPDATED OR LAST_UPDATED IS NULL) 列,然后再进行此更新。

- INTERVAL 1 MINUTE

这样,每次您的活动开始运行时,您都会更新应该更新的所有行,但尚未更新。这取决于事件运行的准确时间。 DATE允许事件最迟运行一分钟并仍能正常运行。

如果您需要为特定行安排未来的其他更新,请更改LAST_UPDATED列的值,但不要触及<input type="file" name="userfile" multiple>列。

答案 1 :(得分:1)

您是否只是在寻找CURDATE()

CREATE EVENT myeventsdasa11s
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE

DO
  UPDATE messagesd
  SET amount = amount * 5
  WHERE DATE = CURDATE();

答案 2 :(得分:1)

如果您需要当前的实际日期时间,请使用mysql NOW()

CREATE EVENT myeventsdasa11s
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE

DO
  UPDATE messagesd
  SET amount = amount*5
  WHERE DATE = NOW();