HSQLDB:替换为

时间:2017-12-19 02:00:20

标签: mysql sql hsqldb

自:

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

为什么?

1 个答案:

答案 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应该可以正常运行。