利用navicat设定mysql定时任务(事件)时发现的BUG

起因

项目上需要用到定时任务去更新某些表的内容,所想着网上查一下,试着弄一下。开始很顺利,但等我按着步骤弄完后,等到保存事件时却发现老是报错,保存不上。
报错如下:

You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 'STARTS CURRENT_TIMESTAMP
ON COMPLETION PRESERVE
DO call update_yhdz()' at line 4

我的事件定义如下:(这个事件是我用navicat premium 15的事件创建工具自动生成的,事件的意思就是从现在开始,每10秒钟执行一次update_yhdz这个函数)

CREATE EVENT `ibase3`.`U1`
ON SCHEDULE
EVERY '10'  
STARTS CURRENT_TIMESTAMP
ON COMPLETION PRESERVE
DO call update_yhdz();

一、排查过程

一开始,我不知道究竟错在哪里,于是稍微改了一下创建模式,从每10秒一次,变成某个固定时间执行,且执行一次

CREATE EVENT `ibase3`.`U1`
ON SCHEDULE
AT ‘2023-09-20 18:00:00’
ON COMPLETION PRESERVE
DO call update_yhdz();

意思为在2023年九月二十号下午6点执行一次。这次保存没问题。
但很快发现另一个问题:我任务是下午5点58分设定的,可是到了6点,居然不执行了。

排查了一大圈,都没发现什么问题,于是想着是不是自己设置的时间字符串有问题,于是又将时间改回了CURRENT_TIMESTAMP,这回是系统定义的字符串,准没问题了吧。

跟预想的一样,事件能成功执行,但我瞟了一眼时间,差点没把自己气晕!系统时间显示是早上10点多!因为mysql在另一个服务器上,我只是在本机远程访问,忽略了两边机器时间不同步!

二、最后发现问题

但是前面说的设定定时任务的保存还是没解决,于是我又仔细对比了一下网上的某个帖子:https://blog.csdn.net/qq_39390545/article/details/109851072
别人的语句:

CREATE EVENT demo_event4 
ON SCHEDULE 
EVERY 10 MINUTE 
STARTS '2020-11-20 12:00:00' 
ON COMPLETION PRESERVE 
DO INSERT INTO `demo_1119` (`id`, `name`, `createTime`) VALUES (null, '陈哈哈', NOW())

我的语句(navicat premium 15生成):

CREATE EVENT `ibase3`.`U1`
ON SCHEDULE
EVERY '10'  
STARTS CURRENT_TIMESTAMP
ON COMPLETION PRESERVE
DO call update_yhdz();

很明显,别人的“every 10” 后面是带单位的,而我的没有单位。
由于navicat 15的事件创建器中的sql预览不能改它自动生成的代码,所以我复制了出来,在查询窗口中加上“SECOND”以后,如果所想的一样,事件可以成功创建,同时也按我设定一样,每10秒执行了一次我给定的函数。

结论:是navicat premium 15的事件创建器的BUG,它自动生成的创建事件代码有语法问题,导致事件创建时报语法错误。

知道这个情况后,我真的哇的一声哭出来了,搞了一个多小时呢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值