我已经在这几个小时了,我已经尝试了在stackoverflow和互联网上找到的所有东西。没有任何效果。我已尝试直接在phpmyadmin的SQL提示符中输入代码,并尝试在事件选项卡中创建事件。
由于一些奇怪的原因,当给它第二个命令时,我得到一个语法错误。每个命令本身都被接受就好了。虽然一起?语法错误。
这是代码。
CREATE EVENT update_stats
ON SCHEDULE EVERY 15 MINUTE
ON COMPLETION PRESERVE ENABLE
DO
BEGIN
UPDATE stats JOIN temp_stats ON stats.unique_key = temp_stats.unique_key
SET stats.clicks = stats.clicks + temp_stats.clicks;
TRUNCATE temp_stats;
END
这会产生语法错误。我在stackoverflow上发现了一个类似的问题(见下文),但没有一个解决方案有效。是的,我尝试设置并使用不同的分隔符。我甚至将phpmyadmin更新为4.4.1。什么都行不通,只是说我有语法错误。我的智慧在这里结束了。 MySQL 5.6.17。
答案 0 :(得分:0)
您忘了放END
分隔符
DELIMITER @
CREATE EVENT update_stats
ON SCHEDULE
EVERY 15 MINUTE
ON COMPLETION PRESERVE ENABLE
DO BEGIN
UPDATE stats JOIN temp_stats ON stats.unique_key = temp_stats.unique_key
SET stats.clicks = stats.clicks + temp_stats.clicks;
TRUNCATE temp_stats;
END@
DELIMITER ;
答案 1 :(得分:0)
我认为此答案缺少解释,因为让-弗朗索瓦(Jean-Francois)是正确的答案,但直到弄清“分隔符”是什么,我才开始使用它。
将命令发送到SQL时,它们之间用“定界符”分隔,默认值为“;”
当我进行活动时,“ CREATE EVENT”语句中的“ BEGIN”和“ END”中包含SQL查询。因此,MYSQL解析查询后,遇到了“;”在BEGIN语句中并正确地在此处结束该语句,并说“在X行的”附近的语法错误”。
因此,要解决此问题,您必须更改默认的定界符以进行解析,然后运行查询,以便可以将SQL语句包含在CREATE EVENT查询中,并忽略分号,并将默认定界符设置为分号。冒号:
DELIMITER $$
CREATE EVENT `snap_extcrs`
ON SCHEDULE
EVERY 1 DAY STARTS '2020-04-17 23:59:59'
ON COMPLETION PRESERVE
ENABLE
COMMENT ''
DO
BEGIN
INSERT INTO table (field, field2)
SELECT 1, 2 FROM table2
WHERE
date = DATE(NOW());
INSERT INTO table3 (field, field2)
SELECT 1, 2 FROM table2
WHERE
date = DATE(NOW());
END$$
DELIMITER ;