计划事件Mysql不接受语法BEGIN END

3

我肯定做了什么非常愚蠢的事情,但以下内容是正确的:

CREATE EVENT delete_old
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Clears old cache data from the DB.'
DO
DELETE FROM summoners 
WHERE `date` < (NOW() - INTERVAL 7 DAY);

下一部分的问题似乎出现了语法错误,最后2行出现了问题:

CREATE EVENT delete_old
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Clears old cache data from the DB.'
DO BEGIN
DELETE FROM summoners 
WHERE `date` < (NOW() - INTERVAL 7 DAY);
END;

据我所知,语法是正确的,但是MySQL Workbench不认同。我打算在BEGIN - END部分内做多个表格,这就是为什么我需要它。我希望有人能够找出问题所在,我很困惑。谢谢您提前的帮助,Smiley。
2个回答

7

您需要将DELIMITER更改为在事件正文中不出现的内容。

我刚刚尝试了它(MySQL Workbench 6.0.6,MySQL 5.6),它完全可行。这里是一个屏幕截图:

enter image description here


两个评论都很清晰和正确。我不记得在Oracle SQL方面做过这件事,但这很完美,谢谢! - Smileynator
当分号出现在触发器/存储过程/事件的主体内时,更改分隔符以处理歧义并不罕见。例如,我知道PostgreSQL和Firebird也需要使用这种技术。 - Bill Karwin

2

这是因为在正文中使用;会打断你的命令。建议使用不同的分隔符。

DELIMITER | 

CREATE EVENT delete_old
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Clears old cache data from the DB.'
DO BEGIN
DELETE FROM summoners 
WHERE `date` < (NOW() - INTERVAL 7 DAY);
END;

| DELIMITER ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接