自:
HyperSQL用户指南
HyperSQL数据库引擎2.4.0
Chapter 12. Compatibility With Other DBMS:
HyperSQL支持并转换INSERT IGNORE,REPLACE和ON 将INSERT的重复键更新变为可预测的和 无差错操作。
使用INSERT IGNORE时,如果任何插入的行违反 PRIMARY KEY或UNIQUE约束,未插入该行。其余的部分 然后,只有在没有其他违规行为的情况下插入行 如长字符串或类型不匹配,否则相应的错误是 返回。
当使用REPLACE或ON DUPLICATE KEY UPDATE时,需要的行 使用给定值更新替换或更新。这有效 就像这些行的UPDATE语句一样。参考 强制执行约束和其他完整性检查并进行更新 触发器被激活。返回的行数仅为总数 插入和更新的行数。
然而,当我尝试
时REPLACE INTO my_table (my_id, my_int) VALUES (1, 2);
我得到了
unexpected token: REPLACE required: INSERT
为什么?
答案 0 :(得分:2)
我建议您需要启用MySQL兼容模式才能使REPLACE
等特定于MySQL的命令生效。从HSQL的第7章documentation:
在MySQL语法兼容模式下,HyperSQL支持INSERT语句的INSERT IGNORE,REPLACE和ON DUPLICATE KEY UPDATE变体。
这里的关键点是需要打开MySQL语法兼容模式。在您在问题中发布的link to Chapter 12之后,我们发现:
使用SET DATABASE SQL SYNTAX MYS TRUE或等效的URL属性sql.syntax_mys = true来启用对AUTO_INCREMENT和TEXT数据类型以及其他几种类型的支持。这些类型定义被转换为HyperSQL等价物。
因此,文档为我们提供了两种启用MySQL兼容模式的方法。我们可以直接从HSQL控制台执行:
SET DATABASE SQL SYNTAX MYS TRUE
另一个,可能是用于开发目的的,是将以下内容添加到连接字符串中:
sql.syntax_mys=true
启用MySQL兼容模式后,REPLACE
应该可以正常运行。