在MySQL中创建事件得到语法错误

Creating an event got syntax error in MySQL

提问人:Juan Enrique Riquelme 提问时间:8/3/2017 最后编辑:Super Kai - Kazuya ItoJuan Enrique Riquelme 更新时间:11/16/2023 访问量:838

问:

我正在尝试创建此事件,但找不到语法错误。

CREATE 
EVENT respaldoRegRawInformeAperturaLocal
ON SCHEDULE EVERY 1 DAY STARTS '2017-08-03 22:00:00' 
DO BEGIN

    -- INSERT INTO BACKUP TABLE
    INSERT INTO regRawInformeAperturaLocalBACKUP (regRawInformeAperturaLocalId, rawInformeAperturaLocal, done, date, deviceId) 
    -- GET DATA
    SELECT regRawInformeAperturaLocalId, rawInformeAperturaLocal, done, date, deviceId  
    FROM    regRawInformeAperturaLocal 
    WHERE regRawInformeAperturaLocal.date < DATE_SUB(NOW(), INTERVAL 5 MONTH);

    -- DELETE DATA FROM ORIGINAL TABLE
    DELETE FROM regRawInformeAperturaLocal WHERE regRawInformeAperturaLocal.date < DATE_SUB(NOW(), INTERVAL 5 MONTH);

END;

[代码编辑 1]

CREATE 
EVENT respaldoRegRawInformeAperturaLocal
ON SCHEDULE EVERY 1 DAY STARTS '2017-08-03 22:00:00' 
DO BEGIN

    -- INSERT INTO BACKUP TABLE
    INSERT INTO regRawInformeAperturaLocalBACKUP (regRawInformeAperturaLocalId, rawInformeAperturaLocal, done, date, deviceId) 
    -- GET DATA
    SELECT regRawInformeAperturaLocalId, rawInformeAperturaLocal, done, date, deviceId  
    FROM    regRawInformeAperturaLocal 
    WHERE date < DATE_SUB(NOW(), INTERVAL 5 MONTH);

    -- DELETE DATA FROM ORIGINAL TABLE
    DELETE FROM regRawInformeAperturaLocal WHERE date < DATE_SUB(NOW(), INTERVAL 5 MONTH);

END;

[编辑] 这是语法错误消息:

[Err] 1064 - SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在第 11 行的“”附近使用的正确语法

数据库 语法 错误1064 mysql事件

评论

1赞 John Joe 8/3/2017
发布错误 ..
0赞 Juan Enrique Riquelme 8/3/2017
更新。它说它在这个字符串上:“WHERE regRawInformeAperturaLocal.date < DATE_SUB(NOW(), INTERVAL 5 MONTH);”
0赞 John Joe 8/3/2017
为什么 , 不仅 ?regRawInformeAperturaLocal.datedate
0赞 SS_DBA 8/3/2017
这并不重要,但为什么要在不需要时引用 Where 子句中的表名?
1赞 wchiquito 8/3/2017
你试过使用吗?DELIMITER

答:

2赞 Juan Enrique Riquelme 8/3/2017 #1

我可以让它工作:

我必须添加分隔符并将语法从 END; 更改为 END|

无论如何,这是代码:

DELIMITER |
CREATE 
    EVENT IF NOT EXISTS respaldoRegRawInformeAperturaLocal
    ON SCHEDULE EVERY 1 DAY STARTS '2017-08-03 22:00:00' 
    DO BEGIN

    -- INSERT INTO BACKUP TABLE
    INSERT INTO regRawInformeAperturaLocalBACKUP (regRawInformeAperturaLocalId, rawInformeAperturaLocal, done, date, deviceId) 
    -- GET DATA
    SELECT regRawInformeAperturaLocalId, rawInformeAperturaLocal, done, date, deviceId  
    FROM    regRawInformeAperturaLocal 
    WHERE date < DATE_SUB(NOW(), INTERVAL 5 MONTH);

    -- DELETE DATA FROM ORIGINAL TABLE
    DELETE FROM regRawInformeAperturaLocal WHERE date < DATE_SUB(NOW(), INTERVAL 5 MONTH);

END|
DELIMITER ;

现在我必须测试它,但我可以创建它,所以我想这很好。

[编辑] 该活动就像一个魅力。

评论

1赞 spencer.sm 3/11/2021
使用分隔符解决了我在 Amazon RDS 上使用 MySQL v5.7 的问题
0赞 Super Kai - Kazuya Ito 11/16/2023 #2

我在下面遇到了同样的错误:

错误 1064 (42000):SQL 语法中有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在第 4 行的 '' 附近使用的正确语法

当我没有在事件中设置 DO 语句时,如下所示:plus_one

CREATE EVENT plus_one
ON SCHEDULE EVERY 1 SECOND
STARTS '2023-11-15 00:00:00';

或者,当我没有在事件中的语句中设置任何 SQL 语句时,如下所示:DOplus_one

CREATE EVENT plus_one
ON SCHEDULE EVERY 1 SECOND
STARTS '2023-11-15 00:00:00'
DO; -- Here

因此,我使用如下所示的 SQL 语句设置语句,然后解决了错误:DO

CREATE EVENT plus_one
ON SCHEDULE EVERY 1 SECOND
STARTS '2023-11-15 00:00:00'
DO UPDATE test SET num = num + 1; -- Here