从:
HyperSQL用户指南
HyperSQL数据库引擎2.4.0
Chapter 12. Compatibility With Other DBMS:
HyperSQL支持并将INSERT的INSERT IGNORE,REPLACE和ON DUPLICATE KEY UPDATE变体转换为可预测和无错误的操作。
使用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
这是为什么?
我建议您需要启用MySQL兼容模式才能使REPLACE
等特定于MySQL的命令生效。从HSQL documentation的第7章:
在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
应该可以正常工作。