HSQLDB:REPLACE INTO

问题描述 投票:1回答:1

从:

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 sql hsqldb
1个回答
2
投票

我建议您需要启用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应该可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.