【问题标题】:HSQLDB ON DUPLICATE KEY UPDATE syntax errorHSQLDB ON DUPLICATE KEY UPDATE 语法错误
【发布时间】:2021-02-06 07:15:01
【问题描述】:

我尝试执行以下查询:

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, age) VALUES (1, 1)
               ON DUPLICATE KEY
[2020-10-23 11:09:42] [42590][-5590] unexpected end of statement:  required: UPDATE : line: 2

我做错了什么?

【问题讨论】:

  • 我几乎觉得可能由于某种原因没有启用 MySQL 语法模式。
  • @Tim Biegeleisen 如何查看?
  • @Tim Biegeleisen PUBLIC.PUBLIC> SET DATABASE SQL SYNTAX MYS TRUE [2020-10-23 11:23:14] 在 4 毫秒内完成 PUBLIC.PUBLIC> INSERT INTO tblUserMetadata (userMetadataId, portalId) VALUES (1, 1) ON DUPLICATE KEY [2020-10-23 11:23:14] [42590][-5590] 语句意外结束:必需:更新:行:2
  • 你可以尝试运行这个:SELECT 'true' WHERE 'Hello World' REGEXP '^H.*d$'; 吗?让我们尝试验证 MySQL 语法的其他方式。
  • @Tim Biegeleise PUBLIC.PUBLIC> SELECT 'true' WHERE 'Hello World' REGEXP '^H.*d$' [2020-10-23 11:25:45] [42581][- 5581] 意外的令牌:WHERE

标签: insert sql-insert hsqldb upsert


【解决方案1】:

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' 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-29
    • 2014-10-18
    • 1970-01-01
    • 2018-06-27
    • 2011-05-16
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    相关资源
    最近更新 更多