创建事件时我的语法有什么问题? phpMyAdmin的

时间:2015-04-07 21:42:41

标签: mysql phpmyadmin

我已经在这几个小时了,我已经尝试了在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。

phpmyadmin|How to create an event do 2 actions

2 个答案:

答案 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 ;