HSQLDB ON DUPLICATE KEY UPDATE语法错误

问题描述

我尝试执行以下查询

SET DATABASE sql Syntax MYS TRUE;

然后:

INSERT INTO mytable (id,age) VALUES (1,1)
ON DUPLICATE KEY UPDATE id=2,age=33;

我收到错误消息:

INSERT INTO mytable (id,1)
               ON DUPLICATE KEY
[2020-10-23 11:09:42] [42590][-5590] unexpected end of statement:  required: UPDATE : line: 2

我怎么了?

解决方法

OP在评论中对此进行报告:

PUBLIC.PUBLIC> SET DATABASE SQL SYNTAX MYS TRUE [2020-10-23 11:23:14] completed in 4 ms 
PUBLIC.PUBLIC> INSERT INTO tblUserMetadata (userMetadataId,portalId) VALUES (1,1) ON DUPLICATE KEY [2020-10-23 11:23:14] [42590][-5590] unexpected end of statement: required: UPDATE : line: 2

这些行显示正在使用SQL客户端运行脚本。 SQL客户端会预先准备该语句,并认为该语句在关键字KEY之后结束,而关键字UPDATE是新语句的开始。因此,它尝试将不完整的SQL查询发送到数据库引擎。

MySQL语法正在运行,因为该命令已被接受并执行。

您可以通过从系统表中进行选择来检查属性设置:

SELECT * FROM information_schema.system_properties 

设置了MySQL兼容模式后,以下语句返回true

SELECT property_value FROM information_schema.system_properties 
    WHERE property_name = 'sql.syntax_mys'