我有一张表需要会员每5天更新一次。如果行的上次更新超过5天,则事件调度程序将任何过时行设置为零。 我的开发环境是:
Windows 7, 32bit.
MySQL 5.5.39
PHP 5.4.45
我的第一个疑问是:
$query = 'CREATE EVENT event_name
ON SCHEDULE EVERY 5 HOUR
ON COMPLETION PRESERVE ENABLE
DO
UPDATE database_name.table_name SET table_column_name = 0 WHERE (CURRENT_TIMESTAMP - last_update_date) > 5 DAY'
我在PHP中运行脚本,但浏览器只是停止了。显示“未找到服务器”。
然后我在phpMyAdmin中测试了它。这次我得到:
#1064 - 您的SQL语法出错。检查与您的mysql服务器版本对应的mysql手册,以获得正确的语法 在'DAY'附近使用。
我检查了MySQL参考手册(但版本为5.6)。我的查询似乎是正确的,除非我遗漏了一些东西。所以我将查询更改为:
CREATE EVENT event_name
STARTS '2015-11-01 00:00:00'
ENDS '2030-11-01 00:00:00'
ON SCHEDULE EVERY 5 HOUR
ON COMPLETION PRESERVE ENABLE
DO
UPDATE database_name.table_name SET table_column_name = 0 WHERE (NOW() - last_update_date) > 5 DAY
仍然得到相同的结果。
在参考相关主题((How to schedule a stored procedure in MySQL))时,我的php信息中没有event_scheduler
。
请帮忙。
答案 0 :(得分:1)
您尝试在事件上执行的查询似乎存在问题。假设last_update_date是datetime。
,您可以使用DATE_SUB()UPDATE database_name.table_name SET table_column_name = 0 WHERE DATE_SUB(NOW(), INTERVAL 5 DAY) < last_update_date