我想在预定时间内更新我的数据。我的问题是我无法等到我在当前实时日期输入数据库的日期。例如,我在我的数据库中有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);
答案 0 :(得分:2)
DATETIME
和TIMESTAMP
值与浮点值一样,难以比较数值相等。换句话说,如果它发生在NOW() = datetimestamp
,那就是一个幸运的意外。处理事件时尤其如此:事件实际上在预定时间后不久开始运行。
所以,而不是说这样的话
`DATE` = NOW()
说出这样的话
`DATE` BETWEEN NOW() - INTERVAL 10 SECOND
AND NOW() + INTERVAL 10 SECOND
当然,如此狭窄的时间间隔会使您严重依赖事件调度程序的时间准确性。您最好在表格中添加LAST_UPDATED
DATETIME
类UPDATE 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();