首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Aurora Serverless MySQL 5.6中使用分隔符时出现语法错误

在Aurora Serverless MySQL 5.6中使用分隔符时出现语法错误
EN

Stack Overflow用户
提问于 2019-06-19 12:34:45
回答 2查看 1.8K关注 0票数 3

我使用Aurora Serverless Delimiter 5.6来创建以下触发器,当数据插入到另一个表中时,它将更新一个表,但收到语法错误,特别是在MySQL关键字周围。

代码语言:javascript
复制
DELIMITER $$
CREATE TRIGGER Create_Media_Like_Trigger AFTER INSERT ON MediaLike
FOR EACH ROW
BEGIN 
    IF NEW.likeType = 'LIKE' THEN
        UPDATE Media 
        SET Media.numLikes = Media.numLikes + 1 
        WHERE Media.mediaId = NEW.mediaId;
    ELSEIF NEW.likeType = 'DISLIKE' THEN
        UPDATE Media 
        SET Media.numLikes = Media.numLikes - 1 
        WHERE Media.mediaId = NEW.mediaId;
    ENDIF;
END $$
DELIMITER ;

就像我上面说的,我在DELIMITER附近收到了语法错误,这个问题是亚马逊网络服务所特有的吗?我该如何修复它?

使用错误消息进行更新:

代码语言:javascript
复制
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 'DELIMITER $$ CREATE TRIGGER Create_Media_Like_Trigger 
AFTER INSERT ON MediaLike ' at line 1

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 'ELSEIF NEW.likeType = 'DISLIKE' THEN UPDATE Media SET 
Media.numLikes = Media.num' at line 1

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 'END $$' at line 1
EN

回答 2

Stack Overflow用户

发布于 2020-02-20 04:59:21

我花了一天的时间尝试解决这个问题,所以希望这能帮助到某个人……

DELIMITER是客户端的功能,而不是MySQL服务器的功能。RDS查询编辑器是一个客户端,但它不支持更改分隔符,因此尝试运行您提供的脚本将不起作用,因为它第一次看到分号时会将其解释为命令的结尾,并因语法错误而失败。

那么,如何创建一个包含多个语句和分号的存储过程呢?您必须将其创建为.sql文件,并使用来自Lambda函数或命令行界面的Data API发送它。

首先,在没有任何DELIMITER命令或备用分隔符的.sql文件中创建脚本。

例如:function.sql

代码语言:javascript
复制
CREATE PROCEDURE simpleproc (OUT param1 INT)
BEGIN
   SELECT COUNT(*) INTO param1 FROM t;
END

然后,使用CLI运行脚本,如下所示:

代码语言:javascript
复制
cat function.sql | xargs -0 aws rds-data execute-statement \
    --resource-arn arn:aws:rds:eu-west-1:xxx:cluster:cluster-name \
    --secret-arn arn:aws:secretsmanager:eu-west-1:xxx:secret:secret-name-xxx \
    --database "database_name" \
    --sql

或者,您可以创建一个Lambda函数,该函数读取文件并使用rds_client.execute_statement()通过Data API将脚本发送到服务器。但同样,不要使用DELIMITER语句。服务器可以看到BEGINEND行,并相应地执行操作,而无需更改分隔符。

票数 2
EN

Stack Overflow用户

发布于 2019-10-15 12:17:23

这些信息可能与OP的问题不是严格相关的,但它是密切相关的,并且可能会帮助处于类似情况的其他人(即。从搜索中)。

我在Amazon Aurora Serverless MySQL 5.6数据库上运行了类似的CREATE FUNCTION查询,得到了相同的语法错误。我使用Table Plus (v2.9.1,build 264)作为我的应用程序/客户端。

解决方案是删除2x DELIMITER行。应用程序/客户端足够智能,可以自己确定分隔符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56660118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档